Ошибка "xxxx" не называет тип
У меня возникла проблема при попытке компиляции следующего кода:
#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' не называет ошибку типа. Я новичок в С++ и действительно не знаю, что здесь происходит. Может ли кто-нибудь здесь помочь мне решить это? Спасибо!!
Ответы
Ответ 1
Вы не можете выполнять произвольные выражения в глобальной области видимости, поэтому
mapDial['A'] = 2;
является незаконным. Если у вас есть С++ 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();
Ответ 2
Вы не можете иметь такие выражения, как mapDial['A'] = 2;
в глобальной области. Они должны находиться внутри функции.
Ответ 3
Когда вы объявляете переменную в глобальной области, вы можете выполнять инициализацию. Например,
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;
}