ошибка: LNK2019: неразрешенный внешний символ в Qt

У меня есть два модуля в Qt
1. SapPackets: lib
2. SapApplication: приложение
Про файл для обоих модулей
SapPackets.pro имеет Qt — = GUI
SapApplication.pro имеет Qt + = основной графический интерфейс XML

Целевая ОС — Windows 7

в SapPacket.lib есть класс SapEntity

#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

Файл реализации SapEntity является

#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;
}

SapApplication.pro имеет следующую строку для добавления SapPackets.lib

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

Основная функция в SapApplication

#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

Пожалуйста, помогите мне решить эту проблему ….

0

Решение

Изменить: Почему вы встроите метод в файле реализации? Встроенные функции должны иметь видимое определение вместе с их объявлением. GCC сообщает об ошибке компоновщика для встроенного метода в файле реализации, поэтому я думаю, что это ваша проблема — удалить в соответствии в определении метода или переместите его в заголовок.

Старый ответ:
Хорошо, вы разместили только заголовок с объявлением метода Sap :: Entity :: SapEntityClass :: GetId (). Где определение? Кажется, это не реализовано или, по крайней мере, не связано с вашим приложением.

2

Другие решения

Это может произойти, когда компоновщик найдет определение функции, но не реализацию, которая, скорее всего, скомпилирована в библиотеку.

Попробуйте добавить

LIBS += -lSapPacket

на ваш SapApplication.pro файл, если он уже там.

Это говорит вашему компоновщику, что есть библиотека с именем SapPacket.lib (в Windows; расширение файла будет другим в других ОС), которое содержит реализации некоторых функций.

0

По вопросам рекламы [email protected]