기본적으로 내가 원하는 것은 모든 데이터 형식을 저장할 수 있도록 클래스 내에 전역 변수 GLOBAL_WRAPPER_TYPE
을 갖는 것입니다. 지금까지는 오류가있을 수있는 코드가 있지만 WRAPPED
에서 아무것도 반환하지 않으려는 동안 컴파일됩니다.템플릿으로 중첩 된 클래스를 컴파일하려고합니까?
또한 내 설정 기능이 제대로 작동하는지 궁금하고 클래스에서 템플릿 유형 T를 검색하기 위해 =
연산자를 오버로드해야합니다. 나는 GLOBAL_WRAPPER_TYPE
을 "추출"하는 데 어려움을 겪고 있었고 내부의 기능이 WRAPPED
클래스에서도 작동하는지 여부는 알 수 없습니다. 컴파일되지만 런타임 오류가 발생할 수 있습니다 (아직 실행하지 않았습니다).
NODE temp = WRAPPING.INSIDE.get();
에
nested_class_global_template.cpp|44|error: invalid use of nonstatic data member 'WRAPPER<NODE>::GLOBAL_WRAPPER_TYPE'|
때문에 ... 코드와 컴파일러 오류가 발생했지만 코드는 내가 set()
기능이 작동 단지 확실 해요, 그 선없이 컴파일 않습니다.
마지막으로 포인터로 선언 된 NODE*
이 정적이 아닌 모든 것을 망칠 것이라고 생각하고 싶었습니다.
코드를 수정하십시오.
#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:
T GLOBAL_WRAPPER_TYPE;
WRAPPER(){}
~WRAPPER(){}
class WRAPPED
{
public:
WRAPPED(){}
~WRAPPED(){}
void set(T GLOBAL_WRAPPER_TYPE)
{
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;
};
int main()
{
WRAPPER<NODE> WRAPPING;
WRAPPING.INSIDE.set(NODE(99));
NODE temp = WRAPPING.INSIDE.get();
return 0;
}
이 하나가 작동 수정 됨!
#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:
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;
}
나는 네가 의미하는 바를 의심하고 있었다. 네가 생각하는 것을하지 않는다. 그것의 이상한'WRAPPED'는'GLOBAL_WRAPPER_TYPE'을 "볼"수 없습니다. "WRAPPED가 WRAPPER에 대한 참조를 보유하도록하자." – pandoragami
WRAPPER와 WRAPPED는 두 개의 다른 클래스라고 생각하십시오. – billz
WRAPPER를 WRAPPED로 선언 한 다음 GLOBAL_WRAPPER_TYPE을 (를) 호출합니까? – pandoragami