Другие языки программирования и технологии
вопрос по C++ как работать с заголовками? компилятор ругается, непойму как связать 3 файла. исходники внутри.
файл 1(главный) #include <stdafx.h> #include <iostream> #include <dog.h> int main() { dog NORA; int tmp; std::cout << "Vozrast NORA?\n"; std::cin >> tmp; NORA.Gaf(); NORA.SetAge(tmp); std::cout << "Vozrast NORA=" << NORA.GetAge() << "\n"; return 0; } файл dog.h #include <stdafx.h> #include <iostream> #include <dog.cpp> class dog { public: void Gaf(); int GetAge(); void SetAge(int SAge); private: int Age; }; файл dog.cpp #include <stdafx.h> #include <iostream> void dog::Gaf() { std::cout << "Gaf-Gaf!\n"; } int dog::GetAge() { return Age; } void dog::SetAge(int SAge) { Age=SAge; } когда загоняю все одним файлом прекрасно работает, а так нет*( как поступить в данном случае? и как вообще устроена эта вся система в целом?
Не dog.h должен к себе подключать dog.cpp, а наоборот.
В dog.h хранится прототип, который должен быть подключен ко всем файлам, где иcпользуется класс "dog", в том числе к файлу dog.cpp, в котором прописывается реализация класса и к файлу с функцией main, т. к. там создаётся объект этого класса.
Сам dog.cpp не должен подлючаться ни к каким другим файлам, связь с его содержимым устанавливается на этапе линковки программы.
Вывод: в файлах dog.cpp и main.cpp нужно написать #include <dog.h>
В dog.h хранится прототип, который должен быть подключен ко всем файлам, где иcпользуется класс "dog", в том числе к файлу dog.cpp, в котором прописывается реализация класса и к файлу с функцией main, т. к. там создаётся объект этого класса.
Сам dog.cpp не должен подлючаться ни к каким другим файлам, связь с его содержимым устанавливается на этапе линковки программы.
Вывод: в файлах dog.cpp и main.cpp нужно написать #include <dog.h>
В заголовочные файлы (*.h) ничего не включаешь (*.cpp) , так же первой строкой пишешь
#pragma once
В *. cpp
первой строкой пишешь
#include "stdafx.h"
далее по необходимости все отстальные заголовочные файлы
#pragma once
В *. cpp
первой строкой пишешь
#include "stdafx.h"
далее по необходимости все отстальные заголовочные файлы
.h файлы предназначены для вынесения в них краткой описательной информации о блоке кода (.cpp, .c с тем же названием - для удобства) .
при такой разбивке, в .c или .cpp вы подключаете .h.
при написании .h очень желательно следовать правилу единичного включения. например, для файла stuff.h можно сделать так:
#ifndef __STUFF_H
#define __STUFF_H
код
#endif
в этом случае повторный include stuff.h будет фиктивным
при такой разбивке, в .c или .cpp вы подключаете .h.
при написании .h очень желательно следовать правилу единичного включения. например, для файла stuff.h можно сделать так:
#ifndef __STUFF_H
#define __STUFF_H
код
#endif
в этом случае повторный include stuff.h будет фиктивным
В "dog.h"не подключаешь ни чего, это файл описание и он ни какие ф-ции не использует.
"dog.cpp"-файл реализации, ему нужно описание класса ("dog.h") и библиотека ввода-вывода. Но так как ввод-вывод используется в разных файлах, то #include"iostream" нужно указать в файле"stdafx.h",а его уже указать во всех файлах .cpp.
В главном файле указываешь
#include"stdafx.h"
#include"dog.h"
"dog.cpp"-файл реализации, ему нужно описание класса ("dog.h") и библиотека ввода-вывода. Но так как ввод-вывод используется в разных файлах, то #include"iostream" нужно указать в файле"stdafx.h",а его уже указать во всех файлах .cpp.
В главном файле указываешь
#include"stdafx.h"
#include"dog.h"
Что бы исключить двойное включение файла помещай в заголовки следующие строки
#ifndef _DOG_H
#define _DOG_H
тут пишем тело
#endif
В папке include можно посмотреть, любой заголовочный файл содержит такие строки.
#ifndef _DOG_H
#define _DOG_H
тут пишем тело
#endif
В папке include можно посмотреть, любой заголовочный файл содержит такие строки.
Похожие вопросы
- Нет библиотеки Dev-C++ нет библиотеки mach.h компилятор MinGW где скачать стандартные библиотеки, и как установить?
- Ещё тупой вопрос по C++ :)
- C++ не работает программа посмотрите пожалуйста))
- Как создать *.exe файл? (описание внутри)
- Как создавать сайт HTML Заголовок: Текст 1. Текст 2. Текст 3.
- Вопрос по c++ )
- Тупые вопросы по C#) Конструкторы, set, get.
- Почему при вводе маленьких значений коэффициентов программа на c++ не работает
- Вопрос по C++
- C++ не работает часть программы