Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Собрать проект в Borland C++ 3.1


Автор: Fedor 17.2.2007, 11:57
Привет всем. Я вот сейчас сижу в легком замешательстве. Не получается в борландовском c++ 3.1 сделать элементарный проект из трех файлов: главного файла, хедера и файла с реализацией этого хедера. Собственно, вот код:
Хедер t.h:
Код

#ifndef T_H
#define T_H

void tt( const int param );

#endif /*T_H*/


Реализация хедера. Файл t.cpp:
Код

#include "t.h"

#include <iostream.h>

void tt( const int param )
{
  cout<<param;
}


Главный файл test.cpp:
Код

#include "t.h"

int main()
{
  tt(2);
  return 0;
}


При линке вылазит ошибка
Цитата
tt(const int) defined in module t.cpp is duplicated in module t.cpp


Возможно, стоит упомянуть что все три файла - находятся в проекте. Кроме этих файлов в проекте ничего нет.

Может, у меня что-то с настройками, но вроде пересмотрел все, вроде ничего проблемного нет...

P.S. В студии подобный код работает на ура.

Автор: apook 17.2.2007, 13:37
Включи все файлы в командную строку компилятора tcc

tcc -e a.cpp b.cpp c.cpp

Автор: Fedor 19.2.2007, 19:11
Ага. Нашел в принципе некое решение проблемы. Нужно было в опциях проекта для каждого h-файла вручную выставлять опцию "Exclude from link". Т.е. линковщик cpp и h файлы компилировал в один объектник, насколько я понял и потом кричал что две одинаковые функции.

В общем, такой уже вопрос, для общего ознакомления: зачем он это делает, можно ли все это как-то настроить, или где моя криворукость?

Спс.

Автор: Kuvaldis 22.2.2007, 12:31
Fedor, 
Включай в проект ТОЛЬКО *.cpp. Хедеры не трогай. Include-ы оставь. 
И все будет работать smile  

Автор: dizzy1984 5.4.2007, 05:59
Цитата

void tt( const int param );

поставив пточку с запятой ты определил процедуру с пустым телом

Цитата

void tt( const int param )
{
cout<<param;
}

после чего определил ее снова с кодом вывода переенной

ну не ставятся в c ; при объявлении процедуры.

Автор: Earnest 5.4.2007, 06:30
Цитата(dizzy1984 @  5.4.2007,  06:59 Найти цитируемый пост)
поставив пточку с запятой ты определил процедуру с пустым телом

Цитата(dizzy1984 @  5.4.2007,  06:59 Найти цитируемый пост)
ну не ставятся в c ; при объявлении процедуры. 

Неважное начало жизни на форуме -  так категорически заявлять полную ерунду... smile 
Ты совершенно не прав. Пустое тело - это две скобки {}, а первое выражение - просто предварительное объявление функции. Их может быть сколько угодно, лишь бы друг другу не противоречили.

Автор: zkv 5.4.2007, 07:01
Цитата(dizzy1984 @  5.4.2007,  05:59 Найти цитируемый пост)
поставив пточку с запятой ты определил процедуру с пустым телом

да никакого определения (definition) тут нет, это объявление (declaration) функции, или другими словами ее прототип.

Автор: dizzy1984 9.4.2007, 13:53
Цитата

Неважное начало жизни на форуме -  так категорически заявлять полную ерунду...

smile Ты права. Сознаюсь, надо было сначала попробовать скомпилить прогу.
Это действительно просто декларация.
Меня ввела в заблуждение пришедшая мне на память старая история про то как все начинающие программисты при
переходе с pascal на c++ ставят ; после прототипа функции, после чего пишут на новой строке 
символ открывающейся фигурной скобки и получают ошибку компиляции.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)