错误:在嵌套类中具有不完整的类型|:

error: has incomplete type|: within a nested class?

本文关键字:类型 嵌套 错误      更新时间:2023-10-16

我试图声明一个类型为WRAPPED的对象,该对象位于类WRAPPED中,而类WRAPPED包含在另一个名为WRAPPER的类中。我收到这些编译器错误。

nested_class_incomplete_type.cpp|56|instantiated from 'WRAPPER<NODE>'|
nested_class_incomplete_type.cpp|62|instantiated from here|
nested_class_incomplete_type.cpp|36|error: 'WRAPPER<T>::WRAPPED::WRAP' has incomplete type|
nested_class_incomplete_type.cpp|33|error: declaration of 'class WRAPPER<NODE>::WRAPPED'|

我也尝试过这样做WRAPPER::WRAPPED WRAP;,但这会产生完全相同的错误。如果WRAPPED类存在于类之外,这通常不会成为问题,但由于某种原因,它不允许我声明这样一个简单的对象。请随意用C++编译器语义和上帝Stroustrup的神奇世界来启发我。这是代码。

#include <iostream>
using namespace std;
class NODE
{
        int data;
    public:
        NODE(){}
        ~NODE(){}
        NODE(int data)
        {
            this->data = data;
        }
        void print()
        {
            std::cout<<"data: "<<this->data<<std::endl;
        }
};
template <class T>
class WRAPPER
{
    public:
        static T GLOBAL_WRAPPER_TYPE;
    WRAPPER(){}
    ~WRAPPER(){}
        class WRAPPED
        {
            public:
            WRAPPER::WRAPPED WRAP;
            WRAPPED(){}
            ~WRAPPED(){}
            void set(T GLOBAL_WRAPPER_TYPE)
            {
                WRAPPER::GLOBAL_WRAPPER_TYPE = GLOBAL_WRAPPER_TYPE;
            }
            T& get()
            {
                return GLOBAL_WRAPPER_TYPE;
            }
            WRAPPED& operator=(const WRAPPED &INSIDE)
            {
                GLOBAL_WRAPPER_TYPE = INSIDE.GLOBAL_WRAPPER_TYPE;
                return *this;
            }
        };
        WRAPPED INSIDE;
};
template <class T>
T WRAPPER<T>::GLOBAL_WRAPPER_TYPE;
int main()
{
    WRAPPER<NODE> WRAPPING;
    WRAPPING.INSIDE.set(NODE(99));
    NODE temp = WRAPPING.INSIDE.get();
    temp.print();
    return 0;
}

本质上,您要做的是:

class A
{
    A a;
};
int main()
{
    A a;
    return 0;
}

(你可以在这里看到这会产生同样的错误)

这是无限递归,您正在使用它自己定义一个类型。改为使用指针,如下所示:

class A
{
    A* a;
};
int main()
{
    A a;
    return 0;
}

正如你在这里看到的那样,它编译了。