我試圖聲明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;
}
你的課程包含自己的一個實例。這意味着爲了創建該類型的變量,您需要創建該類型的變量,因此您必須創建該類型的變量......得到它? ;) – Borgleader
我明白了,但我仍然看不出如何解決這個問題。 – pandoragami
您需要將其作爲參考或指針。你無法控制自己,這將會造成無限大的類型。 – Borgleader