Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
#1

Функции в заголовочном файле - C++

10.09.2013, 13:02. Просмотров 921. Ответов 6
Метки нет (Все метки)

Почему нельза задать тело функции в .h файле???
например(header.h):
C++
1
2
3
4
5
6
#ifndef HEADER_H
#define HEADER_H
 
void f(){}
 
#endif // HEADER_H
minGW пишет "C:\Users\max\Extern\header.h:4: multiple definition of `f()'"
http://www.cyberforum.ru/cpp-beginners/thread1513917.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2013, 13:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Функции в заголовочном файле (C++):

определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер?
Сабж, а подробнее если в заголовочном файле hider.h описана функция, допустим...

В каком заголовочном файле находятся функции Sleep() и delay() и как правильно их использовать?
в каком хедере они находятся и как правильно их использовать Добавлено через...

Переменная в заголовочном файле
//qwer.h class qwer { public: extern int a; }; //qwer.cpp #include...

Setlocale в заголовочном файле
main.cpp #include <cstdlib> #include <iostream> #include <cstring>...

Структура в заголовочном файле
Код .h: // file.h #pragma once struct Worker { char name; int cdate;...

6
solar_wind
760 / 751 / 58
Регистрация: 06.07.2009
Сообщений: 2,988
Завершенные тесты: 1
10.09.2013, 13:06 #2
особенности линковки, компилятор тупо линкует твой файл столько раз сколько инклюдов найдет, а потом видит одну и ту же функцию несколько раз, но до него не доходит, что это одна и та же функция, вот и ругается. Разделение на h и cpp файлы поэтому и придумали, что бы эту проблему обойти.
1
maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
10.09.2013, 13:12  [ТС] #3
Ну так а я тогда не понимаю)))
Пример 2:
C++
1
2
3
4
5
6
7
#ifndef HEADER_H
#define HEADER_H
class A
{
void f(){}
};
#endif // HEADER_H
Теперь всё нормально. В чем разница???

Добавлено через 2 минуты
ща на вижуаловском попробую
0
solar_wind
760 / 751 / 58
Регистрация: 06.07.2009
Сообщений: 2,988
Завершенные тесты: 1
10.09.2013, 13:13 #4
maxon887, Потому что в классе. Он класс нашел один раз и видимо в следующий раз его игнорирует. А функции линкует по-другому. Поищи в сети особенности линковки, наверняка есть статьи где эти механизмы подробно разжеваны.
1
maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
10.09.2013, 13:16  [ТС] #5
solar_wind, спасибо, думаю тему можно закрывать.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
10.09.2013, 14:55 #6
Цитата Сообщение от maxon887 Посмотреть сообщение
В чем разница???
Разница в том, что функция, определенная внутри класса неявно считается встраиваемой (inline).
Предлагаю проверить такой вариант:
C++
1
2
3
4
5
6
7
8
#ifndef HEADER_H
#define HEADER_H
class A
{
void f();
};
void A::f(){}
#endif // HEADER_H
1
maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
10.09.2013, 15:58  [ТС] #7
Странно, на работе собрался без проблем и первый вариант. Походу нужно разбираться с компилятором или настройками проекта.
0
10.09.2013, 15:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2013, 15:58
Привет! Вот еще темы с решениями:

С - С++ enum в заголовочном файле
ситуация примерно такая компилятор gcc есть заголовочный файл в нем...

Не подключается namespace в заголовочном файле
Всем доброго дня. Ситуация такая: common.h #pragma once namespace...

Создание структуры в заголовочном файле
Доброго времени суток! Решил заняться разработкой приложений, сейчас делаю...

Объявление класса в заголовочном файле
Здравствуйте. Столкнулся с тем что нужно скомпилировать библиотеку для C++....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru