您好我将构造函数(带参数)从一个类传递到另一个类的构造函数(带参数)。我收到了正式参数错误的重新定义,我理解这个错误需要什么。我的类是正确继承的,我知道这是事实。
这是来自第一个类的构造函数(带有一个参数)。
template <typename DataType>
List<DataType>:: List ( int maxNumber )
: maxSize(maxNumber),
size(0),
cursor(-1)
{
dataItems = new DataType[maxSize];
}
以下是其他类的构造函数:
template < typename DataType, typename KeyType >
OrderedList<DataType, KeyType>::OrderedList(int maxNumber)
{
List<DataType>(maxNumber);//This is where it says I have a redefinition (ERROR HERE)
}
我知道我可以这样修理它:
template < typename DataType, typename KeyType >
OrderedList<DataType, KeyType>::OrderedList(int maxNumber) : List<DataType>(maxNumber)
{
}
我想知道的是如何将上面的那行直接转换为类似于中间代码块的行?另外,为什么我收到此错误?
请帮忙。
答案 0 :(得分:0)
问题是要构造一个List对象,需要将参数传递给它的构造函数。这需要在构造任何派生类之前发生。因此:
template < typename DataType, typename KeyType >
OrderedList<DataType, KeyType>::OrderedList(int maxNumber)
{
List<DataType>(maxNumber);//This is where it says I have a redefinition (ERROR HERE)
}
是无意义的代码。它试图说什么?您想要选择调用基类构造函数的点吗?不幸的是,C ++并没有这样做。首先调用基类构造函数,然后调用派生构造函数。析构函数正好相反。
另外,为了解释你为什么会收到这个错误,让我们用不同的编译方式重写你的代码:
template < typename DataType, typename KeyType >
OrderedList<DataType, KeyType>::OrderedList(int maxNumber)
{
List<DataType>(maxNumber);//This is where it says I have a redefinition (ERROR HERE)
List<DataType> (maxNumber);
List<DataType> maxNumber;
AnyOtherType maxNumber; // You see, you are declaring a local variable with the same name as your parameter?
}