当前位置 : 首页 » 互动问答 » 正文

Cmake在Windows上编译错误C2131和C3863,但不在Linux上

分类 : 互动问答 | 发布时间 : 2018-04-27 18:28:45 | 评论 : 1 | 浏览 : 6 | 喜欢 : 0

我有一段代码可以在Linux(Raspbian)上编译和正常工作,但不能在Windows上编译(VS 17)。

我使用CMAKE 3进行跨平台编译,就像我说的,我没有问题在Linux上构建它

以下是我正在使用的唯一CMAKE选项:

 cmake_minimum_required(VERSION 3.1)
项目(田径)
设置(CMAKE_CXX_STANDARD 11)
...
// CMakeLists.txt的其余部分没有任何幻想

但是在windows下(使用VS 17 native编译器),有一段代码甚至没有构建,我不明白为什么。我得到的错误是(对不起,它是用法语说的,但我觉得很容易理解):

 error C2131:l'expression n'a pasétéévaluéeen constante
note:échecen raison de l'appel d'une fonctionindéfinieou'constexpr'nondéclarée
注意:voir l'utilization de'std :: vector <ROI,std :: allocator <_Ty >> :: size'
错误C3863:le type de tableau'float ['fonction'+] ['fonction'+]'n'est pas attribuable

导致错误的(简化的)一段代码:

 //定义在其他地方
一流的投资回报
{
}

班级跟踪器
{
上市:
    无效的UpdateTrack(vector <ROI> new_roi)
    {
        //一些代码
        float match_table [new_roi.size()+ 1] [m_tracked_roi.size()+ 1]; //编译错误
        //一些代码
    }

私人的:
    vector <ROI> m_tracked_roi;
}

我认为问题的关键是数组的大小仅在编译时就知道,但现在可以使用c ++,而且它在Linux上工作正常(通过工作,我的意思是它的构建和运行良好) 。

有人能解释我什么是goind?以及如何解决这个问题在Windows上? (可能一些额外的CMake选项?)

预先感谢

回答(1)

  • 1楼
  • 可变长度数组不是标准C ++的一部分。数组边界必须是编译时常量表达式。

    GCC和Clang都提供了作为扩展的VLA,但VisualStudio没有。如果您需要跨平台非常量长度的数组,则使用 std :: vector

相关阅读:

How to convert string to char array in C++?

Why is it faster to process a sorted array than an unsorted array?

What does the C++ standard state the size of int, long type to be?

Best C++ IDE or Editor for Windows

Convert char to int in C and C++

usr/bin/ld: cannot find -l<nameOfTheLibrary>

Calling C++ class methods via a function pointer

What is the best way to use a HashMap in C++?

What does the symbol \0 mean in a string-literal?

Where does Visual Studio look for C++ header files?