У меня есть два модуля в Qt
1. SapPackets: lib
2. SapApplication: приложение
Про файл для обоих модулей
SapPackets.pro имеет Qt — = GUI
SapApplication.pro имеет Qt + = основной графический интерфейс XML
Целевая ОС — Windows 7
#ifndef SAPENTITYCLASS_HPP
#define SAPENTITYCLASS_HPP
#include <QString>
namespace Sap
{
namespace Entity
{
class SapEntityClass
{
protected:
unsigned short mush_Id; /* Entity Id */
QString msz_title; /* Entity Title */
public:
SapEntityClass(const unsigned short Id,const QString title);
unsigned short GetId() const;
QString GetTitle() const;
};
}
}
#endif
#include "SapEntityClass.hpp"using namespace Sap::Entity;
SapEntityClass::SapEntityClass(const unsigned short Id,const QString title)
:mush_Id(Id),msz_title(title)
{}
inline
unsigned short SapEntityClass::GetId() const
{
return mush_Id;
}
inline
QString SapEntityClass::GetTitle() const
{
return msz_title;
}
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../SapPackets_Build/release/ - lSapPackets
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../SapPackets_Build/debug/ -lSapPackets
else:unix: LIBS += -L$$PWD/../SapPackets_Build/ -lSapPackets
INCLUDEPATH += $$PWD/../SapPackets
DEPENDPATH += $$PWD/../SapPackets
#include <iostream>
#include "SapEntityClass.hpp"using namespace Sap::Entity;
int main(int argc, char *argv[])
{
SapEntityClass obj(56,"Sample");
std::cerr<<obj.GetId();
return 0;
}
Проблема:
Я получаю следующую ошибку на Compilationa
main.obj:-1: error: LNK2019: unresolved external symbol "public: unsigned short
__thiscall Sap::Entity::SapEntityClass::GetId(void)const " (?
GetId@SapEntityClass@Entity@Sap@@QBEGXZ) referenced in function _main
Пожалуйста, помогите мне решить эту проблему ….
Изменить: Почему вы встроите метод в файле реализации? Встроенные функции должны иметь видимое определение вместе с их объявлением. GCC сообщает об ошибке компоновщика для встроенного метода в файле реализации, поэтому я думаю, что это ваша проблема — удалить в соответствии в определении метода или переместите его в заголовок.
Старый ответ:
Хорошо, вы разместили только заголовок с объявлением метода Sap :: Entity :: SapEntityClass :: GetId (). Где определение? Кажется, это не реализовано или, по крайней мере, не связано с вашим приложением.
Это может произойти, когда компоновщик найдет определение функции, но не реализацию, которая, скорее всего, скомпилирована в библиотеку.
Попробуйте добавить
LIBS += -lSapPacket
на ваш SapApplication.pro
файл, если он уже там.
Это говорит вашему компоновщику, что есть библиотека с именем SapPacket.lib
(в Windows; расширение файла будет другим в других ОС), которое содержит реализации некоторых функций.