简要地说,我有一个模板类Tree,它具有createTree(Data* arrayData[])
方法。此方法接收一个指向Data类型的数据的指针数组:
template<class Data>
void Tree<Data>::createTree(Data* arrayData[]) {
m_indexCreation = 0;
cout << sizeof(arrayData) / sizeof(int) << endl;
m_root = createChildTree(arrayData);
}
在
main()
函数中,我创建了一个指向字符串对象的指针数组并将其填充。然后,我尝试将其传递给createTree()
方法,但是在该方法内部,数组的大小为1。换句话说,该方法内部的计数显示为“1”。这是我的
main()
:int main() {
string* tab[20];
for ( int i = 0 ; i < 20 ; i++ ) {
if ( i % 3 != 0 ) {
tab[i] = new string("James Johnson");
} else {
tab[i] = NULL;
}
}
Tree<string> tree;
tree.createTree(tab);
tree.display(tree.getRoot());
}
我可以毫无问题地在
main()
中打印整个数组的值,但是在createTree()
中,该数组以某种方式减小为1的大小,单个值为NULL。我究竟做错了什么?
最佳答案
检查C常见问题
http://c-faq.com/aryptr/aryparmsize.html
解决方法。传递大小作为参数。
void Tree<Data>::createTree(Data* arrayData[], int sz)
{
...
}
Tree<string> tree;
tree.createTree(tab, sizeof(tab)/sizeof(tab[0]));