4

我在 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();行时,一切都会完美编译。此外,当我删除修饰符并在 cpp 文件中virtual添加实现时,它也可以正常工作。execute()

4

2 回答 2

6

你自己已经给出了答案:

此外,当我删除 virtual 修饰符并在 cpp 文件中添加 execute() 的实现时,它也可以正常工作。

您在标头中声明了该方法execute,但缺少它的实现。这正是链接器错误告诉您的内容。在这种情况下,声明 asvirtual无关紧要。

如果你想创建一个抽象类,你可以在许多在线文章中找到更多细节(例如Wikibooks: Abstract Classes

于 2013-03-27T08:32:52.377 回答
3

您必须实现该方法或从标头中删除声明。(在这种情况下,虚拟关键字无关紧要)

有的话,请教一个问题。

于 2013-03-27T08:29:23.863 回答