我正在尝试使一些功能性的 Unix c++ 适应 Windows 环境。
在原代码中,有:
float *drowPtrs[_imageRows];
为了将其移动到 Windows,我已将其调整为:
float *drowPtrs = new float[_imageRows];
但是,在函数的后面,有这一行:
float &otherDistance = drowPtrs[y][x];
很明显,我刚刚将 drowPtrs
初始化为一维数组,所以这会出错。
编辑:正如所指出的,这实际上是一个 c++ 语法问题,而不是 Unix 到 Windows 的问题。下面的答案很有效。
最佳答案
这一行:
float *drowPtrs[_imageRows];
...如果 _imageRows
不是编译时常量,则在标准 C++ 中是不允许的。这可能是由于 GCC Variable-Length Arrays extension 而编译的.
这“声明”了一个指向 float
大小为 _imageRows
的指针数组。
最好的解决方案是切换到 vector :
std::vector<float*> drowPtrs(_imageRows);
如果你想要一个二维的 float 组,那就更好了:
std::vector<std::vector<float>> drowPtrs(_imageRows);
另一种解决方案是动态分配这个数组:
float **drowPtrs = new float*[_imageRows];
...但是您应该将其放入 unique_ptr
以避免必须手动管理内存:
std::unique_ptr<float*[]> drowPtrs(new float*[_imageRows]);
...或者如果你真的不能,那么你需要在完成后手动删除它:
delete[] drowPtrs;
关于C++ float 数组维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47811013/