3

我在编译一个 c++ 文件时遇到了一些麻烦,该文件在 GCC 下作为以前的版本运行良好。问题是,我正在使用可变数组大小的向量:

unsigned int howmany;
std::vector<int>* array_adresses[howmany]; 

我目前正在使用 Visual-Studio 2010 C++ 编译器来构建 Matlab 64 位 Mex 文件。由于 VC++ 不允许我使用在编译时大小未知的数组,我收到以下错误消息:

错误 2057:预期的常量表达式错误 2466:错误 2133:未知大小

有没有办法使用 GCC 编译器选项构建 64 位 mex 文件,或者在 Matlab 下使用不同的 64 位编译器构建它?

提前致谢!!

4

3 回答 3

4

多少需要是常数,并且需要是一个定义的数量,如下所示:

const unsigned int howmany = 5;
std::vector<int>* array_adresses[howmany];

或者您可以像这样动态定义它:

unsigned int howmany = 5;
std::vector<int>* array_adresses = new std::vector<int>[howmany];
于 2011-04-04T09:13:01.057 回答
2

C++ 标准不允许变长数组。让我们来看看这段代码:

int main(int argc, char *argv[])
{
    int a[argc];
    return 0;
}

这可以很好地编译g++ foo.cpp,但如果您需要严格的标准合规性,则会失败。

g++ foo.cpp -std=c++98 -pedantic

foo.cpp: In function ‘int main(int, char**)’:
foo.cpp:8: warning: ISO C++ forbids variable length array ‘a’

您应该使用vector<vector<int> *>orvector<int> **代替其他人已经建议的。

于 2011-04-04T09:54:44.980 回答
0

只需替换 int ptr[howmany];vector<int> ptr(howmany); 即可在范围结束时获得自动解除分配。

于 2019-05-28T13:09:26.877 回答