2011-11-16 16 views
1

私はすでにエラーについての投稿を見ましたが、これはいくつかの違いがあります。だからこれを閉じないでください。私は、インターフェイスクラスを持って、私はインターフェイスクラスを継承し、インターフェイスクラスのメソッドをオーバーライドするクラスがあります。コードはこのように見えます基本クラスは定義されていませんか?

//interface file 
//Interface.h 
class A 
{ 
    virtual method1(); 
}; 


//b.h 
#include "Interface.h" 
class B : public A 
{ 
    //declaration 
} 

//b.cxx 
#include b.h 
B::method1() 
{ 
    //definition 
} 

私はこれらのクラスをすべてdllでエクスポートしています。そして、私はexeからdllでメソッドとクラスを使用しています。このexeはもう一度somesクラスを含んでいます。これらのクラスは同じインターフェイスファイルを継承し、method1()も使用します。だから使用するmethod1()私のファイルにb.hを含めています。私のinclude文の順序がInterface.hとb.hの場合、exeのコンパイラエラーが発生します。 "基本クラスが定義されていません"と言っています。しかし、もし私がInclude文を並べ替えると、コンパイルエラーは発生しません。いずれにせよ、この問題の根本的な理由が何であるかを私に示唆することができます。

+0

をあなたは完全な誤りを添付することはできますか?単純にエラーが失われた可能性があります –

+0

実際にエラーを生成する完全なエラーメッセージとコードスニペットを投稿してください。さもなければ、私達はすべてちょうど推測するでしょう。 – arne

答えて

1

実際には、サンプルコードに2つのエラーがあります。まず、戻り値の型を持たないメソッドを宣言しません。これはエラーです。二つ目は、あなたが、少なくとも上記のスニペットでは、Bのクラス定義でmethod1を宣言していないということです。

class B : public A 
{ 
    virtual void method1(); 
}; 
0

AとBの両方のクラス定義で仮想メソッド "method1()"を宣言する必要があります。

+0

私はすでにクラスBでそれを宣言しています。私の主な問題はexeファイルのコンパイルエラーです。そして私はexeにmethod1()を定義しています。しかし、私はexeをコンパイルしているとき、私には基本クラスがB.hに定義されていないというエラーがスローされます。それはそうであってはならない。 –

0

あなたはインタフェース場合はIAでIA.hで宣言され、IAから継承するすべてのクラスFooのそれはexeファイルやdllの前IA.hを含んであることを確認してくださいがfoo.hにおけるクラス定義

私は何を疑うことは、これはそうではないことが起こって、ヘッダに基づいていますが、中に特定のファイルにIAの定義を取得していない可能性があります順序を含めます他

関連する問題