URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5043
[ Назад ]

Исходное сообщение
"Не компилит с++"

Отправлено greenetc , 14-Янв-06 16:37 
Почему такие ошибки появляются при компиляции с ключем -x c++ ?  То есть, если делаю програмку обычную, и делаю ему gcc -o mp3 mp3.c то всё ОК, а если переделываю на с++ и пишу ему gcc -x c++ -o mp3 mp3.c то пишет такое :
/usr/locale/include/libmpd/libmpd.h:94:error: using typedef - name 'mpd_Song' after 'struct'
/usr/locale/include/libmpd/libmpdclient.h:94:error: 'mpd_Song' has a previous declaration here
/usr/locale/include/libmpd/libmpd.h:94:error: invalid type in declaration before ';' token

чего он хочет ?


Содержание

Сообщения в этом обсуждении
"Не компилит с++"
Отправлено ACCA , 15-Янв-06 11:02 
>Почему такие ошибки появляются при компиляции с ключем -x c++ ?  
>То есть, если делаю програмку обычную, и делаю ему gcc -o
>mp3 mp3.c то всё ОК, а если переделываю на с++ и
>пишу ему gcc -x c++ -o mp3 mp3.c то пишет такое

- Доктор, а почему если я делаю вот так, то мне больно?
- А вы не делайте.


man gcc: "
If you only want some of the stages of compilation, you can use -x (or filename suffixes) to tell gcc where to start, and one of the options -c, -S, or -E to say where gcc is to stop.  Note that some combinations (for example, -x cpp-output -E) instruct gcc to do nothing at all.
"

Похоже у тебя не включились какие-то инструкци препроцессора, вот оно и заглючило на определениях типов. Возможно нужны ещё -x c++-header и -x c++-cpp-output

Я бы просто переименовал исходник в .C, .cpp или .cc. И тебе понятнее, и компилятору.


"Не компилит с++"
Отправлено gyn61 , 15-Янв-06 11:56 
Кстати, C++ не совсем совместим снизу вверх с C. Например,

typedef struct aaa {
  int a, b, c;
} bbb;

typedef struct bbb {
  double a, b, c;
} aaa;

нормально сработает в C но вызовет ошибку в C++ (в C++ "struct имя" уже определяет тип).


"Не компилит с++"
Отправлено landor , 16-Янв-06 08:37 
>Кстати, C++ не совсем совместим снизу вверх с C. Например,
>
>typedef struct aaa {
>  int a, b, c;
>} bbb;
>
>typedef struct bbb {
>  double a, b, c;
>} aaa;
>
>нормально сработает в C но вызовет ошибку в C++ (в C++ "struct
>имя" уже определяет тип).

struct aaa {
...
};
тоже самое, что и:
typedef struct {
...
} aaa;
но, ИМХО, второе куда более убого. Окаменелый это способ описывать типы структур.


"Не компилит с++"
Отправлено greenetc , 16-Янв-06 17:57 
>>Кстати, C++ не совсем совместим снизу вверх с C. Например,
>>
>>typedef struct aaa {
>>  int a, b, c;
>>} bbb;
>>
>>typedef struct bbb {
>>  double a, b, c;
>>} aaa;
>>
>>нормально сработает в C но вызовет ошибку в C++ (в C++ "struct
>>имя" уже определяет тип).
>
>struct aaa {
>...
>};
>тоже самое, что и:
>typedef struct {
>...
>} aaa;
>но, ИМХО, второе куда более убого. Окаменелый это способ описывать типы структур.
>


так что же все таки мне делать ? Включить -x c++-header и -x c++-cpp-output в компиляторе ? или изменять опеределение структур ?

исходник у меня кстати .cpp


"Не компилит с++"
Отправлено greenetc , 16-Янв-06 17:54 
>Почему такие ошибки появляются при компиляции с ключем -x c++ ?  
>То есть, если делаю програмку обычную, и делаю ему gcc -o
>mp3 mp3.c то всё ОК, а если переделываю на с++ и
>пишу ему gcc -x c++ -o mp3 mp3.c то пишет такое
>:
>/usr/locale/include/libmpd/libmpd.h:94:error: using typedef - name 'mpd_Song' after 'struct'
>/usr/locale/include/libmpd/libmpdclient.h:94:error: 'mpd_Song' has a previous declaration here
>/usr/locale/include/libmpd/libmpd.h:94:error: invalid type in declaration before ';' token
>
>чего он хочет ?


так что же все таки мне делать ? Включить -x c++-header и -x c++-cpp-output в компиляторе ? или изменять опеределение структур ?

исходник у меня кстати .cpp


"Не компилит с++"
Отправлено gyn61 , 16-Янв-06 23:00 
>так что же все таки мне делать ?

То что на C пускай и компилируется gcc без всяких -x, то что на C++ пускай компилируется g++, всё вместе пусть линкуется g++. Надо только не забывать про extern "C". C и C++ - всё-таки разные языки и не надо их путать ;)


"Не компилит с++"
Отправлено greenetc , 17-Янв-06 12:57 
>>так что же все таки мне делать ?
>
>То что на C пускай и компилируется gcc без всяких -x, то
>что на C++ пускай компилируется g++, всё вместе пусть линкуется g++.
>Надо только не забывать про extern "C". C и C++ -
>всё-таки разные языки и не надо их путать ;)


так эта библиотека ,на заголовочный файл которой он ругается - libmpd.h , на С, и работает в программах на С ... а вот когда я пытаюсь использовать её в программе С++ , она ругается ... а собрать то я её не могу , она уже готова  .... что ж мне , исходники её менять ?


"Не компилит с++"
Отправлено ACCA , 19-Янв-06 11:43 
>так что же все таки мне делать ? Включить -x c++-header и
>-x c++-cpp-output в компиляторе ? или изменять опеределение структур ?
>
>исходник у меня кстати .cpp

В примере у тебя - mp3.c, что в данном случае принципиально.

Убери -x, компилятор сам разберётся. Для старых .h, писаных на C и описывающих библиотеки C используй трюк в своём исходнике:

extern "C" {
   #include <c_source_header.h>
};


"Не компилит с++"
Отправлено landor , 07-Фев-06 18:04 
Слушай, я как то по молодости пропутил по большому счёту С'шник, так что юзаю только С++. Возьми да переименуй в *.cpp, возьми книжку посолиднее и следуй пожсказкам транслятора(типа: строка такая-то: хреновый синтаксис! ;)) Помоему вполне не плохой вариант.