-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.
如何使它正常工作?
答案 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 ++中,您都无法分配给数组。
您的问题不是编译器标志,而是您的代码。