ошибка: имеет неполный тип |: внутри вложенного класса?

Я пытаюсь объявить объект типа 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 ++ и богом Страуструпом. Вот код.

#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;
}

2

Решение

По сути то, что вы пытаетесь сделать, это:

class A
{
A a;
};

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

(Вы можете видеть, что это выдает ту же ошибку Вот)

Это бесконечная рекурсия, вы определяете тип, используя себя. Взять вместо этого указатель, вот так:

class A
{
A* a;
};

int main()
{
A a;

return 0;
}

Как вы видете Вот это компилируется.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]