简要地说,我有一个模板类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]));

09-06 22:13