2012-02-13 2 views
1

Я использую dev C++. также я получаю помощника от библиотеки, разработанной кем-то еще для моих собственных проектов на C++. Я добавил два новых класса под названием TriangleList и TriangleLists в библиотеку, поскольку мне нужны новые типы классов для проекта. однажды, я добавил файлы hpp и cpp в библиотеку, я получил массаж, как creating ../lib/libExtraction.a. однако, когда я перезвонил функции, что я написал в новых классах, от моего собственного проекта, я получил массаж ошибки какошибка компоновщика с файлами hpp и cpp, добавленными в библиотеку

`[Linker error] undefined reference to `TriangleLists::Erase()` 

(выше одной для функции Erase) тогда, когда я удалил .cpp-файл и написал все в .hpp, он работает.

Но, я хотел бы сохранить два файла для hpp и cpp далее. поэтому, пожалуйста, скажите мне, как решить эту проблему с ошибкой ссылки, так как я хочу это узнать. заранее спасибо.

ответ

0

Первое, что нужно проверить, если вы экспортирование класса:

class __declspec(dllexport) TriangleLists 
{ 
//members 
}; 

Когда вы включаете заголовок в другом проекте, однако, необходимо указать, что класс импортирован, так:

class __declspec(dllimport) TriangleLists 
{ 
}; 

Это обычно достигается с директивами препроцессора:

#ifdef BUILDING_FIRST_PROJECT 
#define DLLIMPEXP _declspec(dllexport) 
#else 
#define DLLIMPEXP _declspec(dllimport) 
#endif 

//TriangleLists.h 
class DLLIMPEXP TriangleLists 
{ 
} 

и только д efine BUILDING_FIRST_PROJECT в вашем первом проекте. Таким образом, при создании первого проекта вы будете экспортировать класс, и когда вы включите заголовок в другой проект, вы импортируете его.

Во-вторых, другой проект должен ссылаться на файл .lib, созданный первым проектом.

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

+0

Прошу прощения, я не знаю, как это сделать, поскольку это мой первый раз, используя библиотеку и добавляя классы в библиотеку. (также я использую Dev C++). так, пожалуйста, скажите мне, как я должен тестировать ур? – gnp

+0

Собственно, я скопировал существующий hpp из библиотеки и переименовал, а затем написал на нем функции. также для cpp i сделал то же самое. извините, я didnt делать экспорт. любая помощь пожалуйста. – gnp

+0

@ user1199463 Я не знаю, как использовать Dev C++, но в настройках/настройках проекта должна быть какая-то опция, где вы указываете дополнительные библиотеки ссылок, где вам нужно добавить библиотеку. –

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