【发布时间】:2013-12-01 19:51:34
【问题描述】:
我有一个类,我将根据用户的输入声明数组的大小(二维)。 所以:
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”未在此范围内声明。 我明白为什么,但它在堆上并且它是一个指针,它不应该是全局的吗?如果没有,我将如何使其全球化?
【问题讨论】:
-
你应该看看
std::vector -
“效果很好......” - 不,它没有。您的编译器非常宽松。您将
myClass (*)[100]分配给myClass *类型的指针。它们不是同一类型,编译器提高的警告级别可能会告诉您(如果警告配置为失败,则会失败并出现错误,但它应该无论如何都是错误的,我'如果不是,请考虑报废您的工具链)。这也应该告诉你为什么你的第二个 sn-p 也会失败。
标签: c++ pointers multidimensional-array heap-memory