用于比较的具有不同值的 C++ int 包装器类不起作用

标签 c++

为什么下面的用法会给我一个错误: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。这意味着:

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

  2. static 意味着整个类只有一个 self 实例。因此,通过 this->self 访问它是没有必要的,而且实际上会造成混淆。这似乎暗示类 Environment 的每个实例都有自己的拷贝,但实际上并非如此。

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

关于用于比较的具有不同值的 C++ int 包装器类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15970133/

相关文章:

c++ - 绘制顺时针三角形重新排序点

c++ - c++ 中字节的十六进制值到字符串(相当于 od -x 在 linux 中)?

c++ - 调试不会在断点处停止?

c++ - 具有无符号短整数的结构的大小

c++ - 简单指针对象错误C++

c++ - 带指针的任务

c++如何从派生类实例调用模板化基类函数

c++ - cvHoughLines2 内存泄漏

c++ - 为什么会抛出 out_of_range 错误?

c++ - 为什么会出现此错误 (C2582 : 'operator =' function is unavailable in 'B' ) when assigning to a reference?