The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Не компилит с++"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Не компилит с++"  
Сообщение от greenetc (??) on 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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Не компилит с++"  
Сообщение от ACCA (ok) on 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. И тебе понятнее, и компилятору.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Не компилит с++"  
Сообщение от gyn61 (ok) on 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 имя" уже определяет тип).

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Не компилит с++"  
Сообщение от landor email(ok) on 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;
но, ИМХО, второе куда более убого. Окаменелый это способ описывать типы структур.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "Не компилит с++"  
Сообщение от greenetc (ok) on 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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Не компилит с++"  
Сообщение от greenetc (ok) on 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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

6. "Не компилит с++"  
Сообщение от gyn61 (ok) on 16-Янв-06, 23:00 
>так что же все таки мне делать ?

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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


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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

8. "Не компилит с++"  
Сообщение от ACCA (ok) on 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>
};

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру