2012-10-23 60 views
10

tôi gặp phải một vấn đề khi cố gắng biên soạn đoạn mã sau:Lỗi "xxxx" không tên một loại

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

Trình biên dịch đã cho tôi một lỗi: 'mapDial' không tên một lỗi type. Tôi mới đến C++ và thực sự không biết những gì đang xảy ra ở đây. Bất cứ ai ở đây có thể giúp tôi giải quyết vấn đề này không? Cảm ơn!!

Trả lời

14

Bạn không thể thực thi biểu thức tùy ý ở phạm vi toàn cầu, vì vậy

mapDial['A'] = 2; 

là bất hợp pháp. Nếu bạn có C++ 11, bạn có thể làm

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

Nhưng nếu bạn không, bạn sẽ phải gọi một chức năng khởi động từ main để thiết lập nó theo cách bạn muốn nó. Bạn cũng có thể xem xét hàm tạo của map có trình lặp và sử dụng nó với một mảng trong hàm để khởi tạo bản đồ, ví dụ:

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

Cảm ơn bạn rất nhiều! – Lamian

+0

@ user1596792 nếu điều này trả lời câu hỏi của bạn, hãy nhấp vào dấu kiểm bên cạnh để đánh dấu câu trả lời là câu trả lời. –

3

Bạn không thể có tuyên bố như mapDial['A'] = 2; ở phạm vi toàn cầu. Chúng phải ở trong một hàm.

3

Khi bạn khai báo biến trong phạm vi toàn cầu, bạn chỉ có thể khởi tạo. Ví dụ,

Bạn không thể làm báo cáo bình thường như:

a = 9; 

Vì vậy, tôi sẽ sửa chữa các mã với:

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

Cảm ơn bạn rất nhiều! – Lamian

Các vấn đề liên quan