使用g ++ 5.4编译C ++ 11

时间:2019-01-25 09:32:57

标签: c++ c++11

-std=c++11似乎在编译时被忽略:

    g++ -std=c++11 -I../include -I ../../../Toolbox/CShmRingBuf/ -I$MILDIR/include CFrameProd.cpp -o CFrameProd.o
CFrameProd.cpp: In constructor ‘CFrameProd::CFrameProd()’:
CFrameProd.cpp:33:24: error: assigning to an array from an initializer list
     MilGrabBufferList_ = {0};

我尝试了-std=c++0x, -std=gnu++0x, -std=c++14,没有任何帮助。

这是我的g ++版本:

g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

如何使它正常工作?

3 个答案:

答案 0 :(得分:0)

代码似乎在数组声明后将初始化列表分配给数组地址,如下所示:

int main()
{
    long int foo[5];
    foo = {0};
}

产生错误:assigning to an array from an initializer list

相反,它应该像这样:

int main()
{
    long int foo[5] = {0};
}

在您的情况下,它将是:long MilGrabBufferList_[10] = {0};

答案 1 :(得分:0)

下面的代码再现了原始错误:

class CFrameProd{
    public:
    CFrameProd(){
        MilGrabBufferList_ = {0};
    }
    private:
    long MilGrabBufferList_[10];
};

4:28: error: assigning to an array from an initializer list

         MilGrabBufferList_ = {0};

但是,此代码可正确编译:

class CFrameProd{
    public:
    CFrameProd(){}
    private:
    long MilGrabBufferList_[10]={0};
};

此处使用类成员初始化。

发生原始错误是因为在声明数组后无法分配给数组。

(始终可以使用初始化列表:CFrameProd(): MilGrabBufferList_{0}{}

答案 2 :(得分:0)

在任何版本的C ++中,您都无法分配给数组。

您的问题不是编译器标志,而是您的代码。