![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| zhenium |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.10.2006 Репутация: нет Всего: 2 |
Говорю сразу: описание проблемы будет длинным, где-то запутанным.
Есть среда разработки Borland C++ 3.1. Пишу проект, состоящий из большого количества файлов, причём большинство из них - на обычном С. Некоторые файлы ( по заданию ) нужно написать на С++. Всё бы ничего. Но возникает прорблема: при линковке вылетает ошибка в файле, из которого вызываются фукнкции С++. Причём одна и та же для всех файлов, которые написаны на С++. Таким делом я занимаюсь впервые, поэтому, где капать, не знаю. Может я не так что-то делаю. Подскажите мне или объясните, как этой ошибки можно избежать. При написании создаётся файл diod.h, в котором прописаны библиотеки С ( stdio.h, stdlib.h, string.h и т.д.), все прототипы функций, включая функции С++. Каждый файл С++ начинаю со следующего:
В чём я ошибаюсь? P.S. Если начинать так:
то ошибок вылетает вообще куча. Это сообщение отредактировал(а) zhenium - 7.11.2006, 21:54 |
||||
|
|||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
в bc 3.1 надо так
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Возможно, соль в том, что для подсоединения С-кода к С++ нужно отключить декорирование функций...
Попробуй код С++, в котором вызывается С-код, объявлять с помощью extern "C"... |
|||
|
||||
| zhenium |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.10.2006 Репутация: нет Всего: 2 |
>>> JackYF
Если можно, то поясни, как это сделать,т.к. я с таким впервые встретился. >>> Vinter Делал, как ты сказал. Всё равно вылетает ошибка линковщика, связанная именно с С++файлом. Я уже подумал, может нужно как-то сам Borland настраивать? Ребята, помогите! Времени всё меньше остаётся... |
|||
|
||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
тов. zhenium, превед.
Си - это язык программирования разработанный Д.Ричи и Б.Керниганом. Си++ - это другой язык программирования, разработанный командой под лидерством одного дяди со смешным скандинавским именем Бьярн Страуструп, синтаксис которого является расширением языка Си. Среда Borland неплоха тем, что в ней нет особых строгостей с конвенциями языков Си/Си++. Можно писать проект как будто на С, но при этом ввод/вывод делать через cin/cout Среда Borland плоха тем, что по умолчанию она компилирует весь код как С++, т.е. фактически всё что пишется на С, компилится на С++. чтобы работать на чистом Си, нужно обозначить где-то в настройках сборки проекта, что собирать код нужно по стандарту ANSI C, или другой стандартный Си ( какой нибудь там ISO98 ), т.е. НЕ НА СИ++. в Си++ не объявляют: #include <iostream.h> уже давно это делается так: #include <iostream> Далее: если писался проект ногами и через одно место, т.е. сказав, что на С, а на самом деле на С++, но просто без использования классов в программе, и т.д., то и собирать нужно его как С++. Но, если часть проекта на самом деле на С (на т.с. "чистом Си"), и представляет из себя библиотеку и т.п., то обращаться к её функциям нужно так:
в одном и том же файле не практикуется использование обоих языков, т.е. реализация методов C++ на C, и т.д. Всё. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
| zhenium |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 16.10.2006 Репутация: нет Всего: 2 |
Ну вроде понял, попробую так и сделать. На всякий случай внесу ясность. Всего в проекте 13 функций. Из них 9 - на чистом Си ( также и заголовочный, main() и иже с ними ), остальные 4 - надо написать с использованием ввода/вывода С++. Вот тут-то тупик и появляется...
Добавлено @ 01:29 Она заработала!!! Спасибо вам всем огромное за помощь!!! Всё крылось как раз-таки в extern "C". Теперь на долго запомню!!! Без вас бы не справился!!! Спасибо!!! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |