C++ Ошибка компиляции под Ubuntu 12.04
От: zhogar  
Дата: 23.05.14 10:43
Оценка: -1
Здравствуйте уважаемые.

Уже который день бъюсь, не могу найти ошибку в своем коде.

Пишу кросс-код, на винде все прекрасно компилируется и работает, но под убунтой не хочет компилироваться, выдает следующую ощибку:


...

typedef struct array_t {
    int item[4];
} array_t;
std::list<array_t> list_coordinates;

...

list_coordinates.push_back( {x1, y1, x2, y2} );

...


Текст ошибки: main.cpp|34|error: no matching function for call to ‘std::list<array_t>::push_back(<brace-enclosed initializer list>)’|

Пробую так:
list_coordinates.push_back( new array_t( {x1, y1, x2, y2} ) );



ошибка уходит, но появляется другая:

main.cpp|34|error: could not convert ‘{x1, y1, x2, y2}’ from ‘<brace-enclosed initializer list>’ to ‘array_t’|

Под виндой все нормально компилится.

В чем моя ошибка?

Спасибо.
Re: C++ Ошибка компиляции под Ubuntu 12.04
От: watchmaker  
Дата: 23.05.14 11:15
Оценка:
Здравствуйте, zhogar, Вы писали:

Z>В чем моя ошибка?

На каком языке ты пишешь? Почти наверное ты используешь компилятор для языка с++03 вместо компилятора для языка c++11. В с++03 твой код недопустим, что собственно и показывает сообщение об ошибке.

Z> на винде все прекрасно компилируется и работает, но под убунтой не хочет компилироваться

ОС тут ни при чём. Под виндой твой код также не является допустимым фрагментов программы на языке с++03.


Z>Пробую так:

Z>list_coordinates.push_back( new array_t( {x1, y1, x2, y2} ) );

Зачем? Не надо так делать.
Re[2]: C++ Ошибка компиляции под Ubuntu 12.04
От: zhogar  
Дата: 23.05.14 11:34
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>На каком языке ты пишешь? Почти наверное ты используешь компилятор для языка с++03 вместо компилятора для языка c++11. В с++03 твой код недопустим, что собственно и показывает сообщение об ошибке.

сейчас с под убунты вышел, но там чтото типа c++11 или gnu++11, не помню.

W>ОС тут ни при чём. Под виндой твой код также не является допустимым фрагментов программы на языке с++03.

Я знаю что ос тут не причем.

W>
Z>>list_coordinates.push_back( new array_t( {x1, y1, x2, y2} ) );
W>

W>Зачем? Не надо так делать.

Ну как зачем, параметры передать..

p.s.

не знаю снимать вопрос или нет, но так прокатило:

list_coordinates.push_back( {{x1, y1, x2, y2}} );


спасибо.
Re: C++ Ошибка компиляции под Ubuntu 12.04
От: Tilir Россия http://tilir.livejournal.com
Дата: 23.05.14 12:05
Оценка:
Здравствуйте, zhogar, Вы писали:

Чтобы сделать из этого C++98, нужна явная aggregate initialization (8.5.1):

  struct array_t {
    int item[4];
  };

...

  std::list<array_t> list_coordinates;
  array_t x =  { 1, 2, 3, 4 };

  list_coordinates.push_back( x );


Но вот попытка написать как вы написали это уже initializer-list, это в GCC только с -std=c++11

  struct array_t {
    int item[4];
  };

...

  std::list<array_t> list_coordinates;
  array_t x =  { 1, 2, 3, 4 };

  list_coordinates.push_back( x );


~/x86-toolchain-4.8.1/bin/g++ test01.cpp -std=c++11 -Wall -pedantic


Passes ok.

Впрочем для 4.8.1 и в вашем случае должен выдавать не error а warning:

test01.cpp:11:44: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
list_coordinates.push_back( {1, 2, 3, 4} );


Уточните что ли компилятор, который ругается непотребно =) Попробовал сейчас окаменевший от старости GCC 4.4.3, там да:

$ g++ test01.cpp --std=gnu++0x
test01.cpp: In function ‘int main()’:
test01.cpp:11: error: no matching function for call to ‘std::list<array_t, std::allocator<array_t> >::push_back(<brace-enclosed initializer list>)’


Но там просто ещё не доделали новый стандарт. Пользуйтесь новыми компиляторами.
Re[2]: C++ Ошибка компиляции под Ubuntu 12.04
От: Tilir Россия http://tilir.livejournal.com
Дата: 23.05.14 12:08
Оценка:
UPD:

Sorry, второй пример (на компиляцию с C++11) конечно же ваш:

  std::list<array_t> list_coordinates;
  list_coordinates.push_back( {1, 2, 3, 4} );
Re: C++ Ошибка компиляции под Ubuntu 12.04
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 23.05.14 13:40
Оценка: -1
Здравствуйте, zhogar, Вы писали:

Z>В чем моя ошибка?


Не добавил опцию компилятора: -std=c++0x
Re[3]: C++ Ошибка компиляции под Ubuntu 12.04
От: Vain Россия google.ru
Дата: 25.05.14 22:40
Оценка:
Здравствуйте, zhogar, Вы писали:

Z>не знаю снимать вопрос или нет, но так прокатило:

Z>
Z>list_coordinates.push_back( {{x1, y1, x2, y2}} );
Z>

никто твой ошибки практически не заметил
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[4]: C++ Ошибка компиляции под Ubuntu 12.04
От: zhogar  
Дата: 26.05.14 08:44
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, zhogar, Вы писали:


Z>>не знаю снимать вопрос или нет, но так прокатило:

Z>>
Z>>list_coordinates.push_back( {{x1, y1, x2, y2}} );
Z>>

V>никто твой ошибки практически не заметил

ну так тех.форум же я с этой "ошибкой" 2 вечера убил, пока не понял что это синтаксис в моем случае.
Re[5]: C++ Ошибка компиляции под Ubuntu 12.04
От: zhogar  
Дата: 26.05.14 08:51
Оценка:
Z>синтаксис в моем случае.
синтаксис используемого стандарта, я хотел сказать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.