我在StackOverflow上通过类实现发现了一种类似于Java枚举的新颖方法。
在其自己的标头中声明的Symbols类
class Symbols {
public:
Symbols() {}
static const Symbols CREATE;
. . .
private:
std::string the_symbol;
// Symbols constructor
Symbols (std::string symbol){
this->the_symbol = symbol;
}
public:
std::string get_symbol(void) {
return the_symbol;
}
void set_symbol(std::string new_value) { the_symbol = new_value; }
void initialize(void){
const Symbols CREATE = Symbols("create");
. . .
}
};
在课堂上以多种方式使用
bool RecursiveDescentParser::type_name(){
if (accept(Symbols::STRING) || accept(Symbols::INTEGER)){
return true;
}
else
return false;
}
和
symbol_ = Symbols::WHERE;
if (!boost::iequals(tokenizer_->peekAtNext(), symbol_.get_symbol(), loc_)){
// complete any tokens
std::string temp = tokenizer_->completeToken();
}
Symbols
头包含在几个类中。有很多类型的编译器错误1>recursive_descent_parser.obj : error LNK2001: unresolved external symbol "public: static class Symbols const Symbols::VALUES" (?VALUES@Symbols@@2V1@B)
是什么赋予了?我收到了所有39个尚未解决的外部问题,其中一些与该问题无关。我正确定义了头文件以确保没有重复的声明
并且所有类都可以正确编译。
最佳答案
您已经声明了静态成员;但是还需要在一个源文件中对其进行定义和初始化。
const Symbols Symbols::CREATE("create");
我想您认为
initialize
函数正在执行此操作;但是它只是创建一个Symbols
类型的本地对象,然后在函数返回时销毁它。关于c++ - Unresolved external symbol 热度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15817953/