C++ 未解析的外部符号,有 50% 的机会出现在 2 个虚拟抽象方法上
C++ unresolved external symbol with 50% chance on 2 virtual abstract methods
Visual Studio 2015, 2 classes 和真正的歧义。
Class ICommandLine 有下一个相关代码:
class ICommandLine
{
public:
virtual void CL_AssignCommandExecMaps() abstract;
virtual void CL_RecieveCommand(string) abstract;
};
而 class 从 ICommandLine 派生的世界有下一个相关代码:
class World : public ICommandLine
{
public:
virtual void CL_RecieveCommand(string commandLine) override;
virtual void CL_AssignCommandExecMaps() override;
};
所以问题,错误列表:
1>World.obj : error LNK2019: unresolved external symbol "public: virtual void __cdecl ICommandLine::CL_AssignCommandExecMaps(void)" (?CL_AssignCommandExecMaps@ICommandLine@@UEAAXXZ) referenced in function "public: __cdecl ICommandLine::ICommandLine(void)" (??0ICommandLine@@QEAA@XZ)
什么意思 CL_RecieveCommand 重写就好了,但是 CL_AssignCommandExecMaps 仍然没有解决。
这个问题可以通过使用 {} 而不是 abstract 关键字轻松解决,但我真的需要这个 class 是抽象的。
为什么我会收到此错误,即使这两种方法的定义都存在?
这可能是陈词滥调的话题,但无论如何...
我刚刚查看了 ICommandLine 构造函数:
ICommandLine()
{
registered.push_back(this);
CL_AssignCommandExecMaps(); // <- This is call of undefined method
}
Visual Studio 2015, 2 classes 和真正的歧义。
Class ICommandLine 有下一个相关代码:
class ICommandLine
{
public:
virtual void CL_AssignCommandExecMaps() abstract;
virtual void CL_RecieveCommand(string) abstract;
};
而 class 从 ICommandLine 派生的世界有下一个相关代码:
class World : public ICommandLine
{
public:
virtual void CL_RecieveCommand(string commandLine) override;
virtual void CL_AssignCommandExecMaps() override;
};
所以问题,错误列表:
1>World.obj : error LNK2019: unresolved external symbol "public: virtual void __cdecl ICommandLine::CL_AssignCommandExecMaps(void)" (?CL_AssignCommandExecMaps@ICommandLine@@UEAAXXZ) referenced in function "public: __cdecl ICommandLine::ICommandLine(void)" (??0ICommandLine@@QEAA@XZ)
什么意思 CL_RecieveCommand 重写就好了,但是 CL_AssignCommandExecMaps 仍然没有解决。
这个问题可以通过使用 {} 而不是 abstract 关键字轻松解决,但我真的需要这个 class 是抽象的。
为什么我会收到此错误,即使这两种方法的定义都存在?
这可能是陈词滥调的话题,但无论如何...
我刚刚查看了 ICommandLine 构造函数:
ICommandLine()
{
registered.push_back(this);
CL_AssignCommandExecMaps(); // <- This is call of undefined method
}