错误:在嵌套类中具有不完整的类型|:
error: has incomplete type|: within a nested class?
我试图声明一个类型为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;
}
正如你在这里看到的那样,它编译了。
相关文章:
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- C++从外部类继承的嵌套类;不允许使用不完整的类型
- 嵌套模板函数采用 2 个具有相同内部类型的容器
- Boost.Python :C++模板类型匹配的嵌套命名空间
- 使用"auto"推断嵌套初始值设定项列表的类型
- std::void_t 和嵌套的非类型成员
- 受保护的嵌套结构不能用作派生外部类中的返回类型?
- 用于返回嵌套类类型的作用域解析运算符
- CRTP:为什么获得嵌套类型和派生类的嵌套方法有区别
- C++中匿名类型的嵌套结构
- 是否可以指定 C++20 个模板化 lambda 来推断嵌套在参数中的类型?
- 为什么在VS2015中模板相关的嵌套类型名称中不需要typename关键字?
- 为什么嵌套类型的基类不需要"typename"?
- 使用模板化类型(嵌套模板类)的部分模板专用化
- 声明嵌套在模板参数中的类型的变量?
- CRTP - 嵌套叶类类型的可见性
- C++:在嵌套名称说明符中命名的不完整类型
- 使用MPI/OpenMP的C 程序带有派生数据类型(嵌套类对象)容器
- 无效地使用不完整类型(嵌套类情况)
- 类型嵌套在模板化类中的部分专用化