私は、ここ 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 件の未解決の外部情報をすべて受け取りましたが、そのうちのいくつかはこの質問とは関係ありません。重複した宣言がなく、すべてのクラスが適切にコンパイルされるように、ヘッダー ファイルを適切に定義しています。