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

Как правильно подключить свой заголовочный файл? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
serjDev
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 2
20.04.2014, 14:13     Как правильно подключить свой заголовочный файл? #1
Есть два файла.

Основной файл - "2.cpp"

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <windows.h>
#include <string.h>
#include <map>
#include "notes.h"
 
using namespace std;
 
 
 
 
int main(){
      
 
map< string, float > notes;
initMap(notes);
 
       
       Beep(notes["F6d"],300);
 
return 0;       
}
и собственный заголовочный файл "notes.h":

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#pragma once
#ifndef NOTES_H
#define NOTES_H
 
 
void initMap( map<string, float> &theMap )
{
theMap["C5"] = 261.63;
theMap["D5"] = 293.66;  
theMap["E5"] = 329.63;
theMap["F5"] = 349.23;
theMap["G5"] = 392.00;
theMap["A5"] = 440.00;    
theMap["H5"] = 493.88;
theMap["C6"] = 523.25;
theMap["D6"] = 587.32;  
theMap["E6"] = 659.26;
theMap["F6"] = 698.46;
theMap["G6"] = 784.00;
theMap["A6"] = 880.00;
theMap["H6"] = 987.75;
theMap["Г‘5d"] = 277.18;
theMap["D5d"] = 311.13;
theMap["F5d"] = 369.99;
theMap["G5d"] = 415.30;
theMap["A5d"] = 466.16;
theMap["C6d"] = 554.36;
theMap["D6d"] = 622.26;
theMap["F6d"] = 739.98;
theMap["G6d"] = 830.60;
theMap["A6d"] = 932.32;
}  
 
#endif NOTES_H
Вместе работает нормально, но, если выносить ф-ию в h-файл, то Dev-C++ выдает такую ошибку: "5 [путь к файлу '2.cpp'] In file included from [путь к файлу ''2.cpp']" Может, я неправильно оформляю заголовочный файл?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.04.2014, 14:30     Как правильно подключить свой заголовочный файл? #2
Ошибка непонятна. Внешне, вроде бы, всё правильно подключено, но не нужно помещать реализации в заголовочный файл. Там, по общим правилам, делают объявления (прототипы), а реализации помещают в .cpp.

Добавлено через 10 минут
C++
1
2
3
4
5
6
7
#include <iostream>
#include <windows.h>
#include <string> // не string.h
#include <map>
#include "notes.h"
 
using namespace std;
C++
1
2
3
4
5
6
7
8
#pragma once
#ifndef NOTES_H
#define NOTES_H
#include <string>
#include <map>
 
void initMap( std::map <std::string, float>&theMap )
{
serjDev
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 2
20.04.2014, 14:45  [ТС]     Как правильно подключить свой заголовочный файл? #3
В общем-то проблема оказалась банальнейшей. Не проставил std. Спасибо за помощь.

Там, по общим правилам, делают объявления (прототипы), а реализации помещают в .cpp.
А это важно или просто стандарт, которого стараются придерживаться?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.04.2014, 19:40     Как правильно подключить свой заголовочный файл? #4
Цитата Сообщение от serjDev Посмотреть сообщение
Не проставил std.
Не только: string.h вмеcто string - это разные заголовочные файлы; если не сделать в .h файле:
C++
1
2
#include <string>
#include <map>
, то компиляция будет зависеть от места подключения файла notes.h в файле 2.cpp (если поставить его выше, чем сделаны #include <string> и #include <map>, то компилироваться уже не будет), а этого не должно быть.
Цитата Сообщение от serjDev Посмотреть сообщение
А это важно или просто стандарт, которого стараются придерживаться?
Это важно. Если хедер с реализациями будет подключен к нескольким .cpp, то будет ошибка линкера: множественные определения.
Yandex
Объявления
20.04.2014, 19:40     Как правильно подключить свой заголовочный файл?
Ответ Создать тему
Опции темы

Текущее время: 01:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru