2013-11-19 3 views
1

У меня есть статический член класса карты типов. но всякий раз, когда я пытаюсь получить к нему доступ, я всегда получаю сообщение об ошибке. НапримерНе удается получить доступ к статической функции-члену C++

// a.h 
class a { 
    public: 
     static map<string, int>m; 
    a() { 
    } 
    ~a() { 
    } 
}; 

// a.cpp 
    a::m['ADD']=1; 

это ошибка я получаю = «Размер массива имеет нецелым типа«Const символ [4]» Я также получаю странное сообщение об ошибке в линкере.

+2

Я думаю, что ' 'ADD'' должен быть' „ADD“ ' – Shubham

ответ

4

Вы должны определить карту, прежде чем вы можете использовать его:

std::map<std::string, int> a::m = std::map<std::string, int>{{"ADD", 1}}; 

Это будет инициализировать его на карте, проведение один элемент с ключом и значением std::string("ADD")1.

Также обратите внимание на использование двойных кавычек для строковых литералов.

+0

Я сделал это точно, но я получаю эту ошибку „C++ требует спецификатор типа для всех деклараций“ ?? –

+0

@ I.el-sayed К сожалению, я пропустил этот тип. Я исправил это. – juanchopanza

0

Ошибка компилятора: вы используете одиночные кавычки, когда вы, вероятно, собираетесь использовать двойные кавычки.

Ошибка компоновщика: при определении статических переменных класса вам также необходимо определить их в файле cpp. Добавьте следующую строку в файл CPP:

map<string, int> a::m; 
+0

Я сделал это, но у меня все еще есть ошибка. Теперь, что есть в cpp, это std :: map a :: m; a :: m = std :: map { {"ADD", 0}, {"MUL", 1}, }; Я все еще получаю эту ошибку «C++ требует спецификатора типа для всех объявлений» –

+0

- это ваша строка: a :: m ['ADD'] = 1; внутри вызова функции? Если нет, это может быть то, о чем компилятор жалуется. – Ben

Смежные вопросы