我在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/

10-13 06:29