2013-05-13 6 views
0

У меня есть два файла, которые вызывают у меня много горя: camAVTEx.h и camAVTEx.cpp. Вот общая настройка для двух файлов:Неразрешенный внешний символ, не могу понять, почему


//.h//////////////////////////////////////////////// 

/* 
#includes to some other files 
*/ 

class camera_avtcam_ex_t : public camera_t 
{ 
public: 
    camera_avtcam_ex_t(); 
    virtual ~camera_avtcam_ex_t(); 

private: 
    //some members 

public: 
    //some methods 

}; 

void GlobalShutdownVimbaSystem(); 

//.cpp///////////////////////////////////////////// 

#include "StdAfx.h" 
#include "camAVTEx.h" 

//some other #includes 

camera_avtcam_ex_t::camera_avtcam_ex_t() 
{ 
} 

//rest of the class' functions 

void GlobalShutdownVimbaSystem() 
{ 
    //implememtation 
} 

Затем в файл в другой каталог, я делаю #include для точного местоположения .h файл и попытаться использовать класс:


//otherfile.cpp 

#include "..\..\src\HardSupport\Camera.h" 
//this is the base camera class (camera_t) 

#include "..\..\src\HardControl\camAVTEx.h" 
//this is indeed where both the .h and .cpp files are located 

void InitCam 
{ 
    camera_t* maincam = new camera_avtcam_ex_t(); 
} 

void OnExit() 
{ 
    GlobalShutdownVimbaSystem(); 
} 

Когда я компилирую, я получаю следующие ошибки:

8> otherfile.obj: LNK2001 ошибки: неразрешенный внешний символ "общественности: __cdecl camera_avtcam_ex_t :: camera_avtcam_ex_t (ничтожной)" (?? 0camera_avtcam_ex_t @@ QEAA @XZ)

8> otherfile.obj: ошибка LNK2001: неразрешенный внешний символ "недействительным __cdecl GlobalShutdownVimbaSystem (аннулируются)" (GlobalShutdownVimbaSystem @@ YAXXZ)

8> .... \ Bin \ x64 \? Release \ otherfile.exe: фатальная ошибка LNK1120: 2 нерешенных внешних

Я не могу на всю жизнь понять, почему он не может найти реализации этих двух функций.

Так что, я думаю, мой вопрос довольно очевиден: почему я получаю эти ошибки и что мне нужно изменить, чтобы исправить их?

+0

вы уверены, что файл имеет доступ к инклюдникам в вашей программе? Возможно, ваш файл не может найти те, которые включают/ –

+0

, довольно очевидно, но уверены ли вы, что 'camAVTEx.cpp' скомпилирован и связан по файлу' otherfile.cpp'? Какова ваша система сборки? – Offirmo

+0

@ Need4Sleep Я не вижу, как он не мог получить доступ – xcdemon05

ответ

0

Независимо, как вы смотрите на это, ошибка у вас есть: unresolved external symbol "public: __cdecl camera_avtcam_ex_t::camera_avtcam_ex_t(void)" ([email protected]@[email protected]) означает, что компилятор знает символ camera_avtcam_ex_t::camera_avtcam_ex_ (это конструктор класса), так как он видел его объявление в camAVTEx.h файле, но Halas, он не может найти (= разрешить) реализацию этого символа (короче говоря, код).

Это обычно происходит из-за нескольких возможных причин:

  • вы не сказали компилятору о коде (.cpp) вы пытаетесь использовать, чтобы он не знает об этом. Попытайтесь добавить файл в свой проект.
  • Вы компилируете недостающий код, но не связываетесь с ним. Проверьте, нет ли у вас двух отделенных проектов или попробуйте добавить lib в свой проект, если он исходит из lib.
  • в некотором роде, скомпилированный код не соответствует его определению (происходит при смешивании C и C++ или возиться с пространствами имен). Проверьте, не объявляете ли вы противоречащим пространству имен.
  • (возможно, другие причины я не знаю?)
+0

Я чувствую, что моя проблема здесь может быть вашей второй маркой. Я не очень хорошо разбираюсь в настройках компоновщика, хотя бы идею о том, как я буду делать это в VS2010? – xcdemon05