0

我在 Qt
1 中有两个模块。SapPackets:lib
2.SapApplication:
两个模块的 app pro 文件
SapPackets.pro 有 Qt -= gui
SapApplication.pro 有 Qt += core gui 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

请帮我解决这个问题......

4

2 回答 2

2

编辑:为什么要在实现文件中内联方法?内联函数必须具有可见定义及其声明。GCC 为实现文件中的内联方法报告相同的链接器错误,所以我认为这是你的问题 - 在方法定义中删除内联或将其移动到标题。

旧答案:好吧,您只发布了带有 Sap::Entity::SapEntityClass::GetId() 方法声明的标题。定义在哪里?它似乎没有实现或至少没有链接到您的应用程序。

于 2013-07-12T11:11:16.133 回答
0

当链接器找到函数定义而不是实现(很可能已编译到库中)时,可能会发生这种情况。

尝试添加

LIBS += -lSapPacket

到您的SapApplication.pro文件,除非它已经存在。

这告诉您的链接器有一个名为SapPacket.lib(在 Windows 上;文件扩展名在其他操作系统上会有所不同)的库,其中包含一些函数的实现。

于 2013-07-12T11:12:06.507 回答