重新定义形式参数c ++,试图传递构造函数

时间:2016-02-22 02:05:46

标签: c++

您好我将构造函数(带参数)从一个类传递到另一个类的构造函数(带参数)。我收到了正式参数错误的重新定义,我理解这个错误需要什么。我的类是正确继承的,我知道这是事实。

这是来自第一个类的构造函数(带有一个参数)。

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)
{
}

我想知道的是如何将上面的那行直接转换为类似于中间代码块的行?另外,为什么我收到此错误?

请帮忙。

1 个答案:

答案 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?
}