2013-07-29 5 views
0

Я получаю ошибки компоновщика и не могу определить источник проблемы. Я надеюсь, что вы можете помочь мне! Ошибка возникает уже при создании объекта класса ClMyClass.Ошибка компоновщика: «LNK2019: неразрешенный внешний символ»

Две ошибки:

Error 18 error LNK2019: unresolved external symbol "public: virtual __thiscall ClMyClass::~ClMyClass(void)" ([email protected]@[email protected]) referenced in function "void __cdecl Test1(void)" ([email protected]@YAXXZ) 

Error 19 error LNK2019: unresolved external symbol "public: __thiscall ClMyClass::ClMyClass(void)" ([email protected]@[email protected]) referenced in function "void __cdecl Test1(void)" ([email protected]@YAXXZ) 


//Test.cpp 
#include "StdAfx.h" 
#include "MyClass.hpp" 

void Test1(){ 

ClMyClass oHandle; 
} 

//ClMyClass.hpp 

class ClMyClass: public ClMyClassBase 
{ 
public: 
    ClMyClass(void); 
    virtual ~ClMyClass(void); 

//methods... 

} 


//ClMyClass.cpp 

ClMyClass::ClMyClass(void):ClMyClassBase(),m_nCallbackError(ERROR_NOT_INITIALIZED), m_eState(eUnknown) 
{ 
    //initialize members 
} 

ClMyClass::~ClMyClass(void) 
{ 
    Unassign(); 
} 

EDIT: Добавлен .cpp файл

+2

Вам нужно определить две функции, которые ваш компилятор жалуется: 'ClMyClass' и' ~ ClMyClass'. Объявление их без их реализации обычно приводит к такой ошибке. – Nbr44

+0

@ Nbr44 Но это стандартный конструктор и деконструктор. Я не думаю, что они нуждаются в определении? – tzippy

+1

@Borgleader Это довольно плохой дубликат. В следующий раз укажите \ [[tag: C++ - faq] \] в ваших критериях поиска? – sehe

ответ

1

Вы не определили конструктор и деструктор, который вы объявленную в своем классе ClMyClass.

ClMyClass::ClMyClass(){ 
    //implementation 
} 

ClMyClass::~ClMyClass(){ 
    //implementation 
} 

Это обычно делается в отдельном .cpp файл, который содержит все класс реализации функций-членов.

+0

Прошу прощения, я полностью забыл включить файл .cpp. Он существует и имеет определения конструктора и деконструктора! – tzippy

+0

@tzippy Что ваш компоновщик говорит, что есть «Я знаю, что есть две функции (ctor и dtor), они были объявлены, но я не могу найти их реализации» – JBL

+0

Извините, если я не понял, но они на самом деле определенный в файле cpp. Добавил его прямо сейчас на мой пост. – tzippy

0

В вашей реализации вы не реализовали виртуальные функции. Если вы используете виртуальные функции, вы должны реализовать все виртуальные функции, даже если вы их не используете. В противном случае компоновщик будет иметь неразрешенную ошибку символа, которую вы видите.

Если функция не используется в классе, то не будет получена ошибка, поскольку ссылка на эту функцию отсутствует. Таким образом, компоновщик не увидит этого и не пожалуется. Для виртуальной функции это другое, потому что они всегда генерируются.

+0

На самом деле есть файл сложения. Я добавил его на свой пост. Сожалею. Но я все равно получаю ошибку, конечно. – tzippy

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