【发布时间】:2021-03-01 00:21:29
【问题描述】:
C++ 中非常奇怪的重新定义错误,尤其是包括 main 在内的所有其他文件都没有错误。
我有我的标题(各种动物)和一个实现文件“animals.cpp”。
我的标题遵循以下格式:
class Mammal : public Animal{
public:
Mammal(){} //empty constructor
virtual ~Mammal(){} // destructor
void createNewMammalObject(std::string name, std::string trackingNum, std::string nurse, std::string subType, std::string type){}
std::string getSubtype() {}
void setSubtype(std::string subType){}
int getNursing(){}
void setNursing(int nursing){}
void setType(std::string type){}
int getNumEggs(){}
protected:
int nursing;
};
实现文件中的实现如下:
Mammal::Mammal() {} //empty constructor
virtual Mammal::~Mammal(){} // destructor
void Mammal::createNewMammalObject(std::string name, std::string code,std::string nurse,std::string subType, std::string type){
this->setNursing(nursing);
this->setSubType(subType);
this->createNewAnimalObject(name, trackingNum,subType,type);
}
std::string Mammal::getSubtype() {
return subType;
}
void Mammal::setSubtype(std::string subType) {
this->subType = subType;
}
int Mammal::getNursing() {
return this->nursing;
}
void Mammal::setNursing(int nursing) {
this->nursing = nursing;
}
void Mammal::setType(std::string type){
this->type = type;
}
int Mammal::getNumEggs() {
return 0;
}
我的实现文件的#includes 是:
#include "animal.h"
#include "oviparous.h"
#include "mammal.h"
#include "crocodile.h"
#include "goose.h"
#include "pelican.h"
#include "bat.h"
#include "seaLion.h"
#include "whale.h"
所有头文件和实现都遵循这种格式以遵循单一定义,除了作为抽象类并且包含函数定义的animal.h。所有其他函数肯定只定义一次。但是,在构建项目之后,实现文件中的每个函数都说它是一个重新定义并指向头文件作为原始定义。我非常困惑。这是一个 Eclipse 问题吗?我的抽象类是否应该像其他头文件一样在我的实现文件中定义?
【问题讨论】:
标签: c++ c++11 redefinition