简体   繁体   中英

Error “xxxx”does not name a type

I encountered a problem when tried compiling the following code:

#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;
}

The compiler gave me a error: 'mapDial' does not name a type error. I am new to c++ and really don't know what is going on here. Can anyone here help me to solve this? Thanks!!

You cannot execute arbitrary expressions at global scope, so

mapDial['A'] = 2;

is illegal. If you have C++11, you can do

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

But if you don't, you'll have to call an initialisation function from main to set it up the way you want it. You can also look into the constructor of map that takes an iterator, and use that with an array in a function to initialise the map, eg

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();

When you declare a variable in global scope, you may only do initialization. Eg,

int a = 0;

You cannot do normal statements like:

a = 9;

So I would fix the code with:

#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;
}

You can't have statements like mapDial['A'] = 2; at global scope. They must be inside a function.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM