gpt4 book ai didi

c++ - 带指针的模板,创建二维数组

转载 作者:行者123 更新时间:2023-11-30 05:35:52 24 4
gpt4 key购买 nike

我在使用模板和指针时遇到了一点问题。我正在尝试为一些不同类型的不同矩阵创建一个二维数组。我必须在有意义的地方使用模板和引用。我的主要功能是这样的,我不能改变它:

int main(){
int row, column;
cin >> row;
cin >> column;

int** M1;
double** M2;

reserve(M1, row, column);
reserve(M2, row, column);

return 0;
}

所以我的储备函数看起来像这样:

template <typename S>
void reserve(S &x, int row, int column){

x = new S*[row];
for(int i = 0; i < row; ++i) {
x[i] = new S[column];
}
}

我的问题是我没有得到这个函数的解决方案。我尝试了所有我能想到的方法,但没有任何效果。我认为问题在于我无法正确使用类型**指针和类型参数。在我上面发布的版本中,我收到如下错误:

error: cannot convert ‘int****’ to ‘int**’ in assignment x = new S*[row];

如果有人能帮我修复这个功能,我会很高兴。

最佳答案

reserve 的签名更改为此应该修复编译错误

template <typename S>
void reserve(S **&x, int row, int column)

或者,您可以实现reserve,以便它返回新分配的数组

template <typename S>
S** reserve(int row, int column)
{
S** x = new S*[row];

for (int i = 0; i < row; ++i) {
x[i] = new S[column];
}

return x;
}

记得在使用完后使用delete []删除数组:)

关于c++ - 带指针的模板,创建二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33726935/

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