在 Windows 上编译错误 C2131 和 C3863,但在 Linux 上不编译错误
Compile Error C2131 and C3863 on Windows but NOT on Linux
我有一段代码,可以在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选项?
提前致谢
可变长度数组不是标准C++的一部分。 数组边界必须是编译时常量表达式。
GCC和Clang都提供VLA作为扩展,但VisualStudio没有。 如果需要跨平台非恒定长度数组,请使用 std::vector
。
相关文章:
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- std::is_base_of表示ctor编译错误
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- Qt Cmake 错误编译"GuiSupportQt not found"
- Opengl 精度转换错误编译错误 E0415
- 库将ARM架构错误编译为架构X64
- RT 音频 Mac 错误 g++ 编译错误
- 错误编译Boost.log
- 错误编译QT创建者 / QT窗口小部件示例
- 错误编译MIPS32
- Visual Studio 2013 中的错误(编译和运行代码)
- 链接错误编译qt项目在visual 2010
- 无法用模板错误编译nsgmls
- 奇怪的错误.编译失败
- 如果有人调用c++中的方法,则强制错误(编译时)
- 来自autoconf测试的错误编译命令
- 时间限制超出错误C++编译
- SFML 2.3 和 CodeBlocks 错误编译