簡體   English   中英

錯誤“xxxx”未命名類型

[英]Error “xxxx”does not name a type

嘗試編譯以下代碼時遇到問題:

#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 ++的新手,真的不知道這里發生了什么。 這里有人可以幫我解決這個問題嗎? 謝謝!!

你不能在全局范圍內執行任意表達式,所以

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

在全局范圍內聲明變量時,您可能只進行初始化。 例如,

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

你不能有像mapDial['A'] = 2;這樣的陳述mapDial['A'] = 2; 在全球范圍內。 它們必須在函數內部。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM