1

以下に示すように、2 つのクラスが設定されているとします。基本的には、main() で定義された class1 オブジェクトを 2 番目のクラスのメソッドに渡したいと考えています。これをコンパイルしようとすると、class1 が宣言されていないと表示されます。なぜこれが機能しないのか、どうすれば修正できるのか、誰か説明できますか?

//class1.h:

class class1
{
public:
    class1();
    void method1();
private:
    int myNumber;
};

//class1.cpp has the implementation for method1();

//class2.h:

class class2
{
public:
    class2();
    void method2(class1 myclass);
};

//class2.cpp:

#include "class1.h"
#include "class2.h"

int main( void )
{
    class1 myclass;
    class2 anotherClass;

    anotherClass.method2(myclass);

    return 0;
}

void class2::method2(class1 myclass)
{
    return;
}
4

3 に答える 3

6

classクラス定義にキーワードがありません。

class1{...}必要の代わりにclass class1{...}、など。

于 2012-05-25T20:02:41.000 に答える
1

では、コンパイラは がどのように定義されているかをclass2.h「認識」していません。class1考えられる解決策は 2 つあります。

  • #include "class1.h"を追加class2.h
  • ヘッダーの先頭で宣言するだけで、いわゆるinの前方宣言を追加します。次に、への参照またはポインタを期待するように変更する必要があります。次に を追加すると、すべてが機能します。class1class2.hclass class1;method2class1#include "class1.h"class2.cpp
于 2012-05-25T20:05:15.213 に答える
1

class class1唯一のクリーンな解決策は、 の定義の前にヘッダーの定義を含めることですclass class2

クラスを宣言するだけで、クラスを定義しないため、前方宣言(グノソフィロンの答え)はここでは役に立たないことに注意してください。これは、クラスへのポインターまたは参照を使用できることを意味しますが、それ以上は使用できません。特に、class1 myclassしようとするときに値を渡すことはできません。

于 2012-05-25T20:34:04.670 に答える