C++ C++;在2种虚拟抽象方法上有50%几率出现未解析外部符号
Visual Studio 2015,2个类和真正的模糊性。C++ C++;在2种虚拟抽象方法上有50%几率出现未解析外部符号,c++,virtual,abstract,unresolved-external,C++,Virtual,Abstract,Unresolved External,Visual Studio 2015,2个类和真正的模糊性。 类IComHandline具有下一个相关代码: class ICommandLine { public: virtual void CL_AssignCommandExecMaps() abstract; virtual void CL_RecieveCommand(string) abstract; }; 从IComHandline派生的类World具有下一个相关代码: class W
类IComHandline具有下一个相关代码:
class ICommandLine
{
public:
virtual void CL_AssignCommandExecMaps() abstract;
virtual void CL_RecieveCommand(string) abstract;
};
从IComHandline派生的类World具有下一个相关代码:
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_ReceiveCommand覆盖得很好,但CL_AssignCommandExecMaps仍未解决。
这个问题可以很容易地通过放置{}而不是abstract关键字来解决,但是我真的需要这个类是抽象的。即使两种方法的定义都存在,为什么我会出现这个错误?这可能是老生常谈的话题,但无论如何…
我刚刚查看了IComHandline构造函数:
ICommandLine()
{
registered.push_back(this);
CL_AssignCommandExecMaps(); // <- This is call of undefined method
}
ICommandLine()
{
注册。推回(此);
CLSUBITIONDEXCEDCPMASH(;)//Cudio>抽象< <代码>不是C++关键字。它可能是也可能不是微软扩展。您可能需要定义纯虚拟方法,例如“代码>虚拟空隙CLSAdvutiDeCuxCeMeX())=0;< />代码>