【发布时间】:2014-05-13 00:06:06
【问题描述】:
我目前正在为 FreeCell 实现实例化一组卡片堆栈。 Array、Stack 和 Card 类都是我自己创建的,Stack 和 Array 类都是模板化的。
Array<StackRA<Card>> * hometemp = new Array<StackRA<Card>>(4);
当此代码运行时,它会按预期实例化一个大小为 4 的 Array,但会调用 Stack 上的默认构造函数,我需要将其实例化为大小为 13。
我尝试了以下方法:
Array<StackRA<Card>> * hometemp = new Array<StackRA<Card>(13)>(4)
Array<StackRA<Card>> * hometemp = new Array<StackRA<Card>13>(4)
Stack的默认构造函数如下:
template <typename T>
StackRA<T>::StackRA() : m_stack()
{
size = 0;
}
以及我要调用的 1 arg 构造函数
template <typename T>
StackRA<T>::StackRA( int data ) : m_stack( data )
{
size = data;
}
我在 Google 上试试运气,但它不断引导我访问模板类中的模板资源。任何想法表示赞赏。
编辑:进入我的程序会导致 Array 构造函数
template<class T>
Array<T>::Array(int length, int start_index)
{
if (length < 0)
{
cout << "Length cannot be negative, length has been defaulted to 0\n";
m_length = 0;
}
else
{
m_length = length;
m_start_index = start_index;
m_array = new T[length];
}
}
更具体地说,问题在于“m_array = new T[length];”调用 StackRA 默认构造函数。问题仍然存在,如何调用非默认构造函数。我应该在实例化的哪个位置放置我想要传入的尺寸数据?
EDIT2:我已经解决了这个特定实现的问题:
template <typename T>
StackRA<T>::StackRA() : m_stack()
{
size = 13;
}
【问题讨论】:
标签: c++