2014-09-19 6 views
0

У меня есть следующие classA.hПолучение неразрешенный внешний символ при компиляции C++ класс

#ifndef ClassAH 
#define ClassAH 
class A 
{ 
public : 
     A(); 
    ~A(); 
     static std::map< std::string, std::vector<string> > getSomething(); 
} 
#endif 

и реализация в classA.cpp

#include classA.h 

std::map< std::string, std::vetor<string> > classA::getSomething() 
{ 
    //implementation 

    return map 
} 

Теперь у меня есть еще один класс, в котором classB.cpp Я делаю:

#include classA.h 
void method1() 
{ 
    std::map< std::string, std::vector<string> > map = classA::getSomething(); 
} 

Примечание getSomething() является статическим.

Когда я скомпилирую классB Я получаю ошибку LNK2019 по методу getSomething(), который говорит о неразрешенном внешнем символе .... ссылается на метод1().

Что здесь не так?

ответ

0

в classA.cpp вы только что объявили глобальную функцию. Вы должны включить A:: в определении:

std::map< std::string, std::vector<string> > A::getSomething() 
{ 
    return map; 
} 

Таким образом, компилятор знает, что метод getSomething() принадлежит к классу A

+0

на самом деле я включать в себя :: в моем определении, (я забыл его в моем первоначальном посте я теперь отредактировал вопрос), но все еще получаю ошибку, когда я вызываю это в classB.cpp – SomeDude

+0

, ваш класс 'A', но в коде, который вы набрали classA :: –

+0

, я не решил, что решил. Мне пришлось изменить файл определения. Благодарю. – SomeDude

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

  • Нет связанных вопросов^_^