【发布时间】:2014-10-19 22:07:11
【问题描述】:
我在文本冒险游戏的文本命令解析器中编写了以下内容。
我正在尝试将用户输入的字符串与枚举类中的项目相关联。以下是我的头文件:
#include <iostream>
#include <map>
#include <string>
using namespace std;
enum class Noun
{
// Interrogation subjects
name, // ask the subject his name
base, // where is the base?
attack, // when will the attack be?
invalid
};
map < string, Noun > knownNouns;
knownNouns["name"] = Noun::name;
knownNouns["base"] = Noun::base;
knownNouns["attack"] = Noun::attack;
Noun parseNoun(string &noun)
{
auto n = knownNouns.find(noun);
if ( n == knownNouns.end() ) {
return Noun::invalid;
}
return n->second;
当我把它通过编译器时,我得到以下信息:
nouns.h:46:1: error: 'knownNouns' does not name a type
knownNouns["name"] = Noun::name;
^
nouns.h:47:1: error: 'knownNouns' does not name a type
knownNouns["base"] = Noun::base;
^
nouns.h:48:1: error: 'knownNouns' does not name a type
knownNouns["attack"] = Noun::attack;
^
nouns.h: In function 'Noun parseNoun(std::string&)':
nouns.h:52:10: error: 'n' does not name a type
auto n = knownNouns.find(noun);
^
nouns.h:53:10: error: 'n' was not declared in this scope
if ( n == knownNouns.end() ) {
^
nouns.h:54:16: error: 'Noun' is not a class or namespace
return Noun::invalid;
^
nouns.h:56:12: error: 'n' was not declared in this scope
return n->second;
^
这是我第一次尝试使用地图和枚举,我不确定我做错了什么。我也不是非常熟悉自动变量的使用,所以这对我来说有点像货物崇拜编程。我希望我理解了它的实现,一旦我解决了我遇到的类型定义问题,错误就会消失。
编辑:这很尴尬。我复制粘贴了一个我已经更正的错误。代码仍然无法编译时(即发生相同问题时)
map < string, Noun > knownNouns;
knownNouns["name"] = Verb::name;
knownNouns["base"] = Verb::base;
knownNouns["attack"] = Verb::attack;
修正为
map < string, Noun > knownNouns;
knownNouns["name"] = Noun::name;
knownNouns["base"] = Noun::base;
knownNouns["attack"] = Noun::attack;
【问题讨论】:
-
你必须把你的任务放在一个函数中。
-
我已经用c++11编译器编译过了,是的。
-
Galik,我正在寻找一个例子来说明你的意思。您是否知道按照您描述的方式构建它的一个很好的例子?
-
请参阅@Oncaphillis 的回答了解我的意思。这些行必须在函数内部。