0

首先是一小段代码:

class CDb
{
public:
    void CreateLeague(const League &data);
protected:
    int InsertOwners(const std::vector<std::string> &owners, int leagueId);
};

void CDb::CreateLeague(const League &data)
{
    // some code 
    if( InsertOwners( data.GetOwners(), leagueId ) != SQLITE_OK )
    {
      // ROLLBACK transaction
    }
}

int CDb::InsertOwners(const std::vector<std::string> &owners, int leagueId)
{
}

函数GetOwners()声明为:

std::vector<std::string> &GetOwners() const;

在链接期间,我得到以下信息:

未解析的外部符号“受保护:int __thiscall CDb::InsertOwners(class std::vector,class std::allocator >,class std::allocator,class std::allocator > > > const &,int)”(?InsertOwners@ CDb@@IAEHABV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits @D@std@@V?$allocator@D@2@@std@@@2@@std@@H@Z) 在函数“public: void __thiscall CDb::CreateLeague(class CLeagueSettings const &)”中引用( ?CreateLeague@CDb@@QAEXABVCLeagueSettings@@@Z) 1>vc_mswud\baseballdraft.exe : 致命错误 LNK1120: 1 unresolved externals

在 Windows 7 上使用 MSVC 2010。

请帮忙。

4

2 回答 2

0

查看您的代码片段很难为您提供明确的解决方案。

什么是“数据”类型?

我怀疑您正在使用某种与您的应用程序隐式链接的库。您拥有数据类型和函数的所有声明,但没有与 .lib 模块链接,因此 GetOwners 实现不可见,这会导致链接器尖叫。

另一种可能性是您声明了数据类型(类?),但您的项目中不包含实现文件(cpp),因此 data.GetOwners() 导致链接器错误的原因与上述相同:没有可见的实现..

于 2012-10-13T14:06:17.270 回答
0

确保编译以下代码:

int CDb::InsertOwners(const std::vector<std::string> &owners, int leagueId) 
{ 
} 

检查这是否在另一个源文件 (.CPP) 中,并且该特定文件包含在项目中。如果这是实际代码,则会出错,因为它缺少return语句。

于 2012-10-12T08:10:06.043 回答