链接器看不到函数

时间:2012-10-12 07:37:38

标签: visual-c++ linker

首先是一个小代码:

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;

在链接过程中,我得到了以下内容:

  

未解析的外部符号“protected:int __thiscall CDb :: InsertOwners(class std :: vector,class std :: allocator&gt;,class std :: allocator,class std :: allocator&gt;&gt;&gt; const&amp; ,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”中引用(CLeagueSettings const&amp;)类“(?CreateLeague @ CDb @@ QAEXABVCLeagueSettings @@@ Z)   1&gt; vc_mswud \ baseballdraft.exe:致命错误LNK1120:1个未解析的外部

在Windows 7上使用MSVC 2010。

请帮忙。

2 个答案:

答案 0 :(得分:0)

确保编译以下代码:

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

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

答案 1 :(得分:0)

很难给你一个明确的解决方案来查看你的代码片段。

什么是“数据”类型?

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

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