Компиляция C ++ 11 с g ++ 5.4 - PullRequest
       5

Компиляция C ++ 11 с g ++ 5.4

0 голосов
/ 25 января 2019

-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 голосов
/ 25 января 2019

Этот код ниже воспроизводит исходную ошибку:

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}{})

0 голосов
/ 25 января 2019

Вы не можете назначить массив в любой версии C ++.

Ваша проблема не в флагах компилятора, а в вашем коде.

0 голосов
/ 25 января 2019

Код, по-видимому, присваивает список инициализатора адресу массива после объявления массива следующим образом:

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};

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...