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();、すべてが完全にコンパイルされることに注意してください。また、virtual修飾子を削除execute()してcpp-fileにの実装を追加すると、それも機能します。

4

2 に答える 2

6

あなたはすでに自分で答えを出しました:

また、仮想修飾子を削除し、cppファイルにexecute()の実装を追加すると、それも機能します。

executeヘッダーでメソッドを宣言しましたが、その実装がありません。それはまさにリンカエラーがあなたに言っていることです。この場合、宣言は重要でvirtualはありません。

抽象クラスを作成したい場合は、オンラインの多数の記事(Wikibooks:Abstract Classesなど)で詳細を確認できます。

于 2013-03-27T08:32:52.377 に答える
3

メソッドを実装するか、ヘッダーから宣言を削除する必要があります。(この場合、仮想キーワードは重要ではありません)

もしあれば、質問してください。

于 2013-03-27T08:29:23.863 に答える