为什么下面的用法会给我一个错误:Undefined referrence to "Environment::self" 所以下面是我的测试用例,类就在它下面,标题和 cpp: 测试:
Environment bla;
bla=Environment::CTE;
if(bla==1){
printf("CTE!");
}else if(bla==Environment::PPE){
printf("NO: its ppe");
}
标题:
class Environment{
public:
enum{CTE, PTE, PPE, LOCALHOST};
static int self;
bool operator==(const int& rhs)const;
Environment& operator=(const int &rhs);
};
和 CPP:
#include "Environment.h"
bool Environment::operator==(const int& rhs)const{
if (this->self ==rhs)
return true;
return false;
}
Environment& Environment::operator=(const int &rhs) {
if (this->self != rhs) {
this->self=rhs;
}
return *this;
}
最佳答案
您已将 self
声明为 static
。这意味着:
你必须在某处定义它。也就是说,将
int Environment::self;
放入一个 .cpp 文件中。此填充可修复您的“Unresolver reference”链接器错误。static
意味着整个类只有一个self
实例。因此,通过this->self
访问它是没有必要的,而且实际上会造成混淆。这似乎暗示类Environment
的每个实例都有自己的拷贝,但实际上并非如此。
如果您希望每个 Enviornment
实例都有自己的 self
值,只需从 self< 中删除
的声明。static
关键字
关于用于比较的具有不同值的 C++ int 包装器类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15970133/