0

C++ クラス内でパブリック構造体を定義しようとしていますが、コンパイルする方法がわかりません。私のヘッダーには、次のものがあります。

class AtomUtility
{
    public:
        struct BoundingBox;
        void doWork(struct AtomUtility::BoundingBox bounds);
};

そしてソースで:

#include"AtomUtility.h"
struct AtomUtility::BoundingBox
{
    double xMin, xMax;
};
int main()
{
    AtomUtility::BoundingBox *myBox = new AtomUtility::BoundingBox;
    myBox->xMin = 0;
    myBox->xMax = 10;
    AtomUtility *myUtility = new AtomUtility;
    myUtility->doWork(*myBox);
    delete myUtility;
}
void AtomUtility::doWork(struct AtomUtilty::BoundingBox bounds)
{
    //do things...
}

これをコンパイルしようとすると、「class "AtomUtility" has no tag member named "BoundingBox".

4

2 に答える 2

2

の定義後にセミコロンを見逃し、AtomUtility::BoundingBoxコンパイラが混乱して診断が不十分になっています。

AtomUtility::BoundingBox*また、を期待する関数にを渡そうとしています。AtomUtility::BoundingBox

コンパイラの診断が不十分な場合は、別のコンパイラでコードを試してみると便利なことがよくあります。いくつかはオンラインで入手できます。たとえば、ComeauClang、またはhttp://codepad.orgなどのコンパイル可能なペーストビンです。

于 2012-08-13T19:15:45.197 に答える
0

https://stackoverflow.com/a/6368118/1483826を引用:

後のクラスへのポインターまたは参照のみを宣言できます (...)。後のクラスのオブジェクトを持つことはできません。

これを修正するには、フィールドとして使用するクラスの前に構造体を宣言する必要があります。

于 2012-08-13T19:17:29.397 に答える