10

質問があいまいに見えることは知っていますが、他の言い方は思いつきませんでしたが、次のようなことは可能ですか:

#include<iostream>

class wsx;

class wsx
{
public:
wsx();
}

wsx::wsx()
{
std::cout<<"WSX";
}

?

4

6 に答える 6

22

はい、可能です。以下は宣言するだけですwsx

class wsx;

この種の宣言は、2 つのクラスが相互に参照するときに必要になるため、前方宣言と呼ばれます。

class A;
class B { A * a; };

class A { B * b; };

そのうちの 1 つを前方宣言する必要があります。

于 2009-05-16T01:55:20.773 に答える
4

これがクラスの定義です

class wsx
{
public:
wsx();
}

これがコンストラクターの定義です

wsx::wsx()
{
std::cout<<"WSX";
}

これは、クラスがどこかで定義されることを示す前方宣言です。

class wsx;
于 2009-05-16T01:56:17.637 に答える
4

あなたの例では、

class wsx; // this is a class declaration

class wsx  // this is a class definition
{
public:
wsx();
}

そうです、それを使用class wsx;することで、クラスを定義せずにクラスを宣言することができます。クラス宣言では、そのクラスへのポインターと参照を宣言できますが、クラスのインスタンスは宣言できません。コンパイラは、クラスのインスタンスに割り当てるメモリ量を知るためにクラス定義を必要とします。

于 2009-05-16T01:55:44.550 に答える
2

はい。ただし、クラスを宣言せずにクラスを定義することはできません。

理由:すべての定義は宣言でもあります。

于 2009-05-16T02:32:15.257 に答える
0

クラスを定義しました。データ メンバーはありませんが、必須ではありません。

于 2009-05-16T01:53:44.727 に答える
-1

私はあなたが何を意味するのか分かりません。貼り付けたコードは正しいようです。

于 2009-05-16T01:52:51.297 に答える