如果这是你需要做的,那么就不要丢弃输入信息,直到你绝对必须:
A<T>* a = new A<T>;
a->pass_A(new NODE);
POLY_TYPE = a;
编辑:
你没有张贴任何错误消息○ ñ你的更新 - 有趣的是,这么多人在这里提出问题相信实际的错误是无关紧要的 - 但你也有类型问题。
由于您将NODE*
传递给pass_A,因此模板参数必须为NODE*
,而不是NODE
。
下编译(与无虚函数的版本清理,用我的调整):
class NODE
{
public:
NODE(){}
~NODE(){}
NODE& operator=(const NODE&) { return *this; }
};
template <class T>
class A;
template <class T>
class BASE
{
public:
BASE(){}
BASE(int mode)
{
if(mode == 1)
{
init_BASE();
}
else if(mode == 0)
{
init_A();
}
}
private:
void init_BASE()
{
POLY_TYPE = new BASE<T>;
}
void init_A()
{
A<T>* a = new A<T>;
a->pass_A(new NODE);
POLY_TYPE = a;
}
BASE* POLY_TYPE;
};
template <class T>
class A : public BASE<T>
{
public:
void pass_A(T DATA)
{
this->DATA = DATA;
}
private:
T DATA;
};
int main()
{
BASE<NODE*> base(1);
return 0;
}
Shift组合键到处都在哭泣。 –
pass_A需要是一个虚拟函数,也是以base为基础声明的,通过基本ptr来看 – doctorlove
一个小例子会受到欢迎。用'int'取代'BASE *'会使这个更具可读性。 – MSalters