缺少类型说明符 - 假设为int。注意:C ++不支持default-int

时间:2012-06-10 08:41:11

标签: c++

我有一个包含以下内容的cpp文件:

char const* types[] = { "char", "short", "int", "long", "float", "double", "void"};
std::set<std::string> ReservedWords;
ReservedWords.insert(std::begin(types),std::end(types));

这会产生错误missing type specifier - int assumed. Note: C++ does not support default-int

我已经读过你不能在全局范围内编写语句,这是这种情况吗?

我不完全理解这条规则,并想知道最好把这段代码放在哪里? (头文件,函数内部等...)

3 个答案:

答案 0 :(得分:2)

首先,不是std::beginstd::end是C ++ 11,所以你确定你有一个兼容的编译器,并且你正在编译C ++ 11支持吗?

我不相信这是 错误。你是否包括:

#include <string>
#include <set>
#include <iterator>

答案 1 :(得分:2)

char const* types[] = { "char", "short", "int", "long", "float", "double", "void"};
std::set<std::string> ReservedWords;
ReservedWords.insert(std::begin(types),std::end(types));

这里的前两行是声明,因为它们声明了变量(typesReservedWords)。第三行不是声明,它只是一个表达式声明,因此它出现在函数之外是不合法的。

您可以执行以下操作:

char const* types[] = { "char", "short", "int", "long", "float", "double", "void"};
std::set<std::string> MakeReservedWords() {
    std::set<std::string> tmp;
    tmp.insert(std::begin(types), std::end(types));
    return tmp;
}

std::set<std::string> ReservedWords(MakeReservedWords());

鉴于您使用的是C ++ 11,您应该可以这样做:

std::set<std::string> ReservedWords { "char", "short", "int", "long", "float", "double", "void"};

如果您的编译器不支持C ++ 11的这一部分,您将不得不接受这样的事情(如@juanchopanza所建议的那样):

char const* types[] = { "char", "short", "int", "long", "float", "double", "void"};
std::set<std::string> ReservedWords(std::begin(types), std::end(types));

答案 2 :(得分:1)

如果未包含正确的文件,则会显示此错误。请务必添加左#include <string.h>

是的,您必须从全局范围中删除此行:

ReservedWords.insert(std::begin(types),std::end(types));

尝试将其放入主要功能中。

相关问题