gpt4 book ai didi

c++ - 在具有可变数组大小的堆上声明对象数组

转载 作者:行者123 更新时间:2023-11-30 01:55:52 27 4
gpt4 key购买 nike

我有一个类,我将根据用户的输入声明数组(二维)的大小。所以:

class myClass {/*...*/}

int main(){
myClass* arrayObj = new myClass[100][100];

这很好,它应该将数组放在堆上。但我需要做:

int arraySize;
cin >> arraySize;
myClass* arrayObj = new myClass[arraySize][arraySize];

我收到错误:“arraySize”不能出现在常量表达式中。

我假设这意味着我只能在数组声明中有常量,但如果没有,那我该怎么做呢?数组太大,无法放入堆栈,这就是我首先在堆上进行处理的原因。

编辑:我已经可以使用指针,但我遇到了另一个问题,我有一个使用数组的函数,即。

void myFunction() 
{
/*...*/
arrayObj[something][something].variable = somethingElse // error here
}

int main ()
{
/*...*/
int arraySize;
cin >> arraySize;
MyClass **arrayObj = new MyClass*[arraySize]
for (int i = 0; i < arraySize; i++) arrayObj[i] = new MyClass[arraySize]
/*...*/
}

我收到:错误:未在此范围内声明“arrayObj”。我明白为什么,但它在堆上并且是一个指针,它不应该是全局的吗?如果不是,我将如何使其全局化?

最佳答案

首先你说错了

class myClass {/*...*/}

int main(){
myClass* arrayObj = new myClass[100][100];

工作正常。编译器将发出错误,因为没有从 myClass ( * )[100] 到 myClass *

的隐式转换

至于你的问题那么你应该使用下面的方法:

myClass **arrayObj = new myClass *[arraySize];

for ( int = 0; i < arraySize; i++ ) arrayObj[i] = new myClass[arraySize];

关于c++ - 在具有可变数组大小的堆上声明对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20316469/

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