Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2009, 22:14   #1
newkobra
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 33
По умолчанию Подключения файла

Доброго времени суток!!!
Работаю над небольшим проектом и встретил небольшую трудность.
У меня есть некие функции которіе я описал в файле Functions.h
Также есть 2 класса(будет больше но проблема уже здесь проявилась), каждый класс имеет свой файл-заголовок и спп. Так вот в обоих классах я должен использовать функции из файла Functions.h. Но если я подключаю его и в одном и в другом файле(в файлах спп) то мне линкер дает ошибку что я два раза определил одну и ту же функцию. Пробовал в том файле с функциями вставить #pragma once не помогает.
Помогите мне плиз.
newkobra вне форума Ответить с цитированием
Старый 29.04.2009, 22:31   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Попробуйте использовать директивы препроцессора:
Код:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H

// код файла functions.h

#endif
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.04.2009, 22:39   #3
newkobra
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Попробуйте использовать директивы препроцессора:
Код:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H

// код файла functions.h

#endif
не помогает(((
1>Selection_Test.obj : error LNK2005: "int __cdecl randomint(int,int)" (?randomint@@YAHHH@Z) already defined in Mutation_Test.obj
1>Selection_Test.obj : error LNK2005: "double __cdecl randomd(void)" (?randomd@@YANXZ) already defined in Mutation_Test.obj
Вот ошибки
newkobra вне форума Ответить с цитированием
Старый 29.04.2009, 22:50   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
не помогает(((
Точно?
Рабочий пример:

Файл functions.h:
Код:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H

int arsmax(int a, int b)
 {
  return (a>b) ? a : b;
 }
#endif
Программа:
Код:
#include <iostream>
#include <conio.h>
#include "functions.h"
#include "functions.h"
using namespace std;
int main()
{
cout<<arsmax(2,5);

getch();
return 0;
}
И все компилится и работает.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.04.2009, 22:53   #5
vvviperrr
Тупой студент
Форумчанин
 
Аватар для vvviperrr
 
Регистрация: 12.05.2007
Сообщений: 614
По умолчанию

2newkobra файл functions.h не забыл добавить в проект?
vvviperrr вне форума Ответить с цитированием
Старый 29.04.2009, 23:29   #6
newkobra
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 33
По умолчанию

попробовал ваш пример все работает.
Нет не забыл. При одном классе все работает когда создаю еще один не работает.
Вот вложил структуру своего проекта:
Mutation_Test и Selection_Test как раз те два класса. Они унаследованы от абстрактного класса описаного в файле Algo. Мой файл с функциями на самом деле названия RandomF.h, main.cpp содержит функцию main()
Изображения
Тип файла: jpg p.jpg (11.1 Кб, 124 просмотров)

Последний раз редактировалось newkobra; 29.04.2009 в 23:38.
newkobra вне форума Ответить с цитированием
Старый 30.04.2009, 17:11   #7
newkobra
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 33
По умолчанию

может мне закинуть на емейл проект чтоб посмотрели у себя на компе?
newkobra вне форума Ответить с цитированием
Старый 30.04.2009, 19:53   #8
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

Кидай: pashan@yandex.ru
Pashan вне форума Ответить с цитированием
Старый 30.04.2009, 20:36   #9
newkobra
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Pashan Посмотреть сообщение
Кидай: pashan@yandex.ru
отправил весь проект
newkobra вне форума Ответить с цитированием
Старый 30.04.2009, 20:59   #10
Pashan
Пользователь
 
Регистрация: 18.03.2009
Сообщений: 89
По умолчанию

Посмотрел.

Не знаю, почему именно так он не хочет линковать. Видимо, .h файл подключается только один раз, но компилятор из-за каких-то своих соображений решает, что функции надо включить в несколько объектных файлов.

Решения у проблемы есть как минимум два:

1) Объявить обе функции randomint и randomd как inline. Тогда они встроятся в код и в итоге вообще как функции присутствовать не будут. И линковаться, соответственно, тоже не будут.

2) Сделать файл RandomF.cpp и в нем реализовать функции, а в заголовочном файле оставить только прототипы.

Последний раз редактировалось Pashan; 30.04.2009 в 21:01.
Pashan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПроВерка Подключения &RiU Общие вопросы Delphi 8 18.10.2011 05:45
проверка подключения к Интернет Noor Работа с сетью в Delphi 9 13.07.2011 01:44
Проверка подключения Shouldercannon Общие вопросы Delphi 4 11.08.2008 14:41
Ошибка подключения к БД CruiserD БД в Delphi 5 26.10.2007 14:42
Время подключения vitalik007 Работа с сетью в Delphi 1 15.08.2007 13:10