Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
#1

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

10.09.2013, 13:02. Просмотров 700. Ответов 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()'"
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2013, 13:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функции в заголовочном файле (C++):

Ошибка при объявлении функции в заголовочном файле - C++
Здравствуйте! Я пытаюсь в заголовочном файле объявить вот такой метод: test.h #include <string> #include <vector> class...

определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? - C++
Сабж, а подробнее если в заголовочном файле hider.h описана функция, допустим так: void f (); void f () { int per= 10; } ...

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

Setlocale в заголовочном файле - C++
main.cpp #include <cstdlib> #include <iostream> #include <cstring> #include <string> #include "studio.h" using namespace...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
10.09.2013, 13:06 #2
особенности линковки, компилятор тупо линкует твой файл столько раз сколько инклюдов найдет, а потом видит одну и ту же функцию несколько раз, но до него не доходит, что это одна и та же функция, вот и ругается. Разделение на h и cpp файлы поэтому и придумали, что бы эту проблему обойти.
1
maxon887
12 / 12 / 3
Регистрация: 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
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
10.09.2013, 13:13 #4
maxon887, Потому что в классе. Он класс нашел один раз и видимо в следующий раз его игнорирует. А функции линкует по-другому. Поищи в сети особенности линковки, наверняка есть статьи где эти механизмы подробно разжеваны.
1
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
10.09.2013, 13:16  [ТС] #5
solar_wind, спасибо, думаю тему можно закрывать.
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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 / 3
Регистрация: 05.06.2012
Сообщений: 280
10.09.2013, 15:58  [ТС] #7
Странно, на работе собрался без проблем и первый вариант. Походу нужно разбираться с компилятором или настройками проекта.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2013, 15:58
Привет! Вот еще темы с ответами:

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

Объявление константы в заголовочном файле - C++
Как объявить константу и массив в заголовочном файле? Map.h #pragma once #include <SFML\Graphics.hpp> extern const...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.09.2013, 15:58
Ответ Создать тему
Опции темы

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