gpt4 book ai didi

c++ - 如何在 C++ 中将动态二维字符串数组作为参数传递

转载 作者:行者123 更新时间:2023-11-30 02:16:11 25 4
gpt4 key购买 nike

我正在尝试将二叉树实现为二维数组。我希望用户输入所需的树高度,程序应该给出一个适当大小的数组。然后,我想打印数组,这就是我需要将其作为参数传递的原因。但是,我收到以下错误:

arrayTree/main.cpp|19|error: cannot convert ‘std::__cxx11::string** (*)[maxNumberOfNodes] {aka std::__cxx11::basic_string<char>** (*)[maxNumberOfNodes]}’ to ‘std::__cxx11::string** {aka std::__cxx11::basic_string<char>**}’ for argument ‘1’ to ‘void printTree(std::__cxx11::string*)’|

请问,是什么导致了错误,我该如何解决?

#include <iostream>
#include <string>
#include <math.h>

using namespace std;
void printTree(string** tree);
int main()
{
int treeHeight = 0;
int maxNumberOfNodes = 1;
cout << "enter tree height";
cin >> treeHeight;
cout << treeHeight<< "\n";

//create an array that can hold every combination for a given tree height
maxNumberOfNodes = pow(2,treeHeight) - 1;
string** tree [3][maxNumberOfNodes];
cout << maxNumberOfNodes;
printTree(tree);

}

void printTree(string** tree){
//not fully implemented yet
for(int i=0; i < sizeof(tree); i++){
cout << "*" << " ";
}
}

最佳答案

string** tree [3][maxNumberOfNodes];

是字符串类型的静态二维数组的语法**,其中两个维度都必须声明为常量。

这里显示了静态和动态数组之间的区别:Multidimensional variable size array in C++

相反,你想写一些类似的东西

string** tree = new string*[3];
for(int i = 0; i < 3; i++)
tree[i] = new string[maxNumberOfNodes];

正如@Remy Lebeau 评论的那样:new[] 的每次出现都需要通过 delete[] 调用来回答,如下所示:

for (int i = 0; i < 3; i++)
delete tree[i];
delete[] tree;

从堆中删除动态分配。

就像@drescherjm 指出的sizeof(tree) 是无效的,因为tree 只是一个指针,不包含有关数组的大小信息。

你可以通过另外传递数组的维度来解决这个问题:

void printTree (string** tree, int dim, int dim2)

并将循环重写为

for(int i = 0; i < dim; i++){
for(int j = 0; j < dim2; j++){
cout << tree[i][j]; //...
}
}

关于c++ - 如何在 C++ 中将动态二维字符串数组作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55251436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com