我在C ++ / CLI中创建了一个新的抽象类,并遇到了一个奇怪的错误。有很多类似的问题,但没有一个答案可以帮助我。
在这个新课程中,我收到以下错误:
error LNK2020: unresolved token (06000002) Foo::execute
这是h文件:
#pragma once
using namespace System::IO::Ports;
using namespace System;
public ref class Foo
{
protected:
SerialPort^ port;
public:
Foo(SerialPort^ sp);
virtual array<Byte>^ execute();
};
这是cpp文件:
#include "StdAfx.h"
#include "Foo.h"
Foo::Foo(SerialPort^ sp)
{
this->port = sp;
}
请注意,当我注释掉virtual array<Byte>^ execute();
行时,所有内容都会完美编译。此外,当我删除virtual
修饰符并在cpp文件中添加execute()
的实现时,它也可以正常工作。
答案 0 :(得分:6)
你自己已经给出了答案:
此外,当我删除虚拟修饰符并在cpp文件中添加execute()的实现时,它也能正常工作。
您在标头中声明了方法execute
,但缺少实现方法。这正是链接器错误告诉你的。
在这种情况下,声明为virtual
并不重要。
如果您想创建一个抽象类,您可以在线查找大量文章中的更多详细信息(例如Wikibooks: Abstract Classes)
答案 1 :(得分:3)
您必须实现该方法或从标头中删除声明。 (在这种情况下,虚拟关键字无关紧要)
如果您有问题,请提出问题。