0

为什么以下用法会给我一个错误:未定义的对“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;
}
4

1 回答 1

1

您已声明selfstatic. 这表示:

  1. 你必须在某个地方定义它。也就是说,放入int Environment::self;一个 .cpp 文件。此填充修复您的“Unresolver reference”链接器错误。

  2. 存在static意味着整个班级只有一个实例self。因此,通过它访问它this->self是没有必要的,实际上是令人困惑的。这似乎暗示类的每个实例Environment都有自己的副本,但实际上并非如此。

如果您希望 的每个实例Enviornment都有自己的值,只需从的声明中self删除static关键字即可。self

于 2013-04-12T11:30:40.367 回答