我有一段代码可以在Linux(Raspbian)上编译和工作,但不能在Windows上编译(VS 17)。
我正在使用CMAKE 3进行跨平台编译,就像我说的那样,我在Linux上构建它没有问题。
以下是我使用的唯一CMAKE选项:
cmake_minimum_required(VERSION 3.1)
project(Track)
set (CMAKE_CXX_STANDARD 11)
...
// The rest of the CMakeLists.txt has nothing fancy
但是在windows下(使用VS 17本机编译器),有一段代码甚至没有构建,我不知道为什么。我得到的错误是(对不起,这是法语,但我觉得很容易理解):
error C2131: l'expression n'a pas été évaluée en constante
note: échec en raison de l'appel d'une fonction indéfinie ou 'constexpr' non déclarée
note: voir l'utilisation de 'std::vector<ROI,std::allocator<_Ty>>::size'
error C3863: le type de tableau 'float ['fonction'+]['fonction'+]' n'est pas attribuable
导致错误的(简化的)代码:
// Defined somewhere else
class ROI
{
}
class Tracker
{
public:
void UpdateTrack(vector<ROI> new_roi)
{
// some code
float match_table[new_roi.size() + 1][m_tracked_roi.size() + 1]; // COMPILE ERROR
// some code
}
private:
vector<ROI> m_tracked_roi;
}
我认为问题是关于数组的大小只在编译时才知道或类似的东西,但现在可以使用c ++,它在Linux上工作正常(通过工作我的意思是它构建并运行良好)
有人可以解释一下这是什么吗?以及如何在Windows上修复此问题? (可能是一些额外的CMake选项?)
提前致谢
答案 0 :(得分:2)
可变长度数组不是标准C ++的一部分。数组边界必须是编译时常量表达式。
GCC和Clang都提供了VLA作为扩展,但VisualStudio却没有。如果需要跨平台非恒定长度数组,请使用std::vector
。