【发布时间】:2013-08-27 19:19:03
【问题描述】:
我正在开发一个派生自另一个类的类,但我被卡住了,使用以下代码:
template <class A, class B, class C>
class BaseClass
{
public:
BaseClass(){}
virtual void amethod( A* aPtr=0)
{
mAPtr=aPtr;
}
virtual void init()=0;
protected:
A * mAPtr;
B* mBPtr;
C * mCPtr;
};
template <class A,class B,class C>
class ChildClass: public BaseClass<A,B,C>
{
public:
ChildClass( A* aAptr =0, B * aBPtr= 0, C* aCPtr= 0):mAPtr(aAptr)
,mBPtr(aBPtr)
,mCPtr(aCPtr)
{}
};
int main()
{
return 0;
}
编译器说子类没有任何父字段。
编译器输出:
In constructor 'ChildClass<A, B, C>::ChildClass(A*, B*, C*)'
In constructor 'ChildClass<A, B, C>::ChildClass(A*, B*, C*)'
error: class 'ChildClass<A, B, C>' does not have any field named 'mAPtr'
error: class 'ChildClass<A, B, C>' does not have any field named 'mBPtr'
error: class 'ChildClass<A, B, C>' does not have any field named 'mCPtr'
我在谷歌搜索,但我找不到答案: 提前谢谢
【问题讨论】:
-
我不确定,但也许你不能用构造函数初始化器初始化继承的字段。尝试在构造函数的主体内初始化它们。
-
(顺便问一下,这个问题和STL有什么关系?)
-
Visual Studio 2012 完美编译了这段代码。
-
像@MatteoItalia 一样,我想知道 STL 与此有什么关系。我编辑了问题以反映问题主体中的内容。如果确实如此,请添加有关这如何触及 STL 的详细信息:)
-
@Helix,那是VS2012中的一个错误
标签: c++