13

次のコードをコンパイルしようとすると、問題が発生しました。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>

using namespace std;

map<char, int> mapDial;

mapDial['A'] = 2;

int main()
{

  cout << mapDial['A'] << endl;
  return 0;
}

コンパイラからエラーが発生しました:'mapDial'は型エラーを指定していません。私はC++を初めて使用しますが、ここで何が起こっているのか本当にわかりません。ここの誰かが私がこれを解決するのを手伝ってくれる?ありがとう!!

4

3 に答える 3

17

グローバルスコープでは任意の式を実行できないため、

mapDial['A'] = 2;

違法です。C ++ 11をお持ちの場合は、

map<char, int> mapDial {
    { 'A', 2 }
};

ただし、そうでない場合は、から初期化関数を呼び出して、main希望どおりに設定する必要があります。mapまた、イテレータを使用するコンストラクターを調べ、関数内の配列でそれを使用して、マップを初期化することもできます。

map<char, int> initMap() {
    static std::pair<char, int> data[] = {
        std::pair<char, int>('A', 2)
    };

    return map<char, int>(data, data + sizeof(data) / sizeof(*data));
}

map<char, int> mapDial = initMap();
于 2012-10-23T22:21:12.843 に答える
5

グローバルスコープで変数を宣言するときは、初期化のみを行うことができます。例えば、

int a = 0;

次のような通常のステートメントを実行することはできません。

a = 9;

だから私はコードを修正します:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>

using namespace std;

map<char, int> mapDial;

int main()
{
  mapDial['A'] = 2;
  cout << mapDial['A'] << endl;
  return 0;
}
于 2012-10-24T00:19:06.230 に答える
4

mapDial['A'] = 2;グローバルスコープのようなステートメントを持つことはできません。それらは関数内にある必要があります。

于 2012-10-23T22:22:31.300 に答える