1

次のものを含む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

グローバルスコープでステートメントを記述できないことを読みましたが、これはここに当てはまりますか?

ルールを完全に理解していないので、このコードをどこに配置するのが最適か知りたいですか?(ヘッダーファイル、関数内など...)

4

3 に答える 3

2

まず、そうではなく、std::beginC std::end++ 11なので、互換性のあるコンパイラがあり、C ++ 11サポートを使用してコンパイルしていることを確認しますか?

しかし、これがエラーだとは思わない。含まれていますか:

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

于 2012-06-10T08:46:23.070 に答える
2
char const* types[] = { "char", "short", "int", "long", "float", "double", "void"};
std::set<std::string> ReservedWords;
ReservedWords.insert(std::begin(types),std::end(types));

typesここでの最初の2行は、変数(および)を宣言しているため、宣言ですReservedWords。3行目は宣言ではなく、単なる式ステートメントであるため、関数の外部に表示することは違法です。

あなたは次のようなことをすることができます:

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));
于 2012-06-10T08:56:53.950 に答える
1

このエラーは、正しいファイルを含めないと表示されます。必ず追加してください
#include <string.h>

はい、グローバルスコープからこの行を削除する必要があります。

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

main関数に入れてみてください。

于 2012-06-10T11:16:17.027 に答える