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'|
나는이 작업을 시도했지만 역시 동일한 오류가 발생합니다. 이것은 일반적으로 WRAPPED
클래스가 클래스 외부에 존재하지만 어떤 이유로 그와 같은 간단한 객체를 선언 할 수없는 경우 문제가되지 않습니다. C++ 컴파일러 의미론과 Stroustrup 신의 마법 세계를 통해 저를 계시하십시오. 코드를 heres.
#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;
}
클래스에 자체 인스턴스가 포함되어 있습니다. 즉, 해당 유형의 변수를 생성하려면 해당 유형의 변수를 만들어야하므로 해당 유형의 변수를 만들어야한다는 의미입니다. ;) – Borgleader
나는 그것을 얻는다. 그러나 나는 그것을 해결하는 방법을 아직도 볼 수 없다. – pandoragami
참조 또는 포인터로 만들어야합니다. 당신은 자신을 포함 할 수 없으며, 그것은 무한히 큰 유형을 만들 것입니다. – Borgleader