首先是一个小代码:
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。
请帮忙。
答案 0 :(得分:0)
确保编译以下代码:
int CDb::InsertOwners(const std::vector<std::string> &owners, int leagueId)
{
}
检查这是否属于另一个源文件(.CPP),并且该特定文件包含在项目中。
如果这是实际代码,则会出错,因为它缺少return
语句。
答案 1 :(得分:0)
很难给你一个明确的解决方案来查看你的代码片段。
什么是“数据”类型?
我怀疑您使用的是某种与您的应用隐式链接的库。 您拥有数据类型和函数的所有声明,但是您没有链接.lib模块,因此GetOwners实现不可见,这会导致链接器尖叫。
另一种可能性是您声明了数据类型(类?)但是项目中没有包含实现文件(cpp)因此data.GetOwners()导致链接器错误的原因与上面相同:没有实现可见..