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

Раздельная компиляция (нюансы использования заголовочных файлов и файлов реализации) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка по алфавиту http://www.cyberforum.ru/cpp-beginners/thread1633397.html
#include <iostream> #include<cstring> using namespace std; int main() { int i,j,s=1,k=0,space=0,n; char str,str1; cout<<"Введите слова: "; gets(str1);
C++ Вычислить сумму чисел в текстовой строке Ввести символьную строку, содержимое которой – несколько целых чисел. Вычислить сумму этих чисел. Строку и полученную сумму вывести на экран. http://www.cyberforum.ru/cpp-beginners/thread1633390.html
Обменять элементы главной диагонали заданной квадратной матрицы, с элементами её первого столбца C++
Составить программу обмена в матрице A элементов, находящихся на главной диагонали, с соответствующими элементами первого столбца.
Компиляция в g++ из MinGW C++
Добрый день! После скачивания и установки MinGW пытаюсь скомпилировать простую программу из разряда Hello, World! Набирая в командной строке g++ hello.cpp -o hello.exe получаю сообщение об ошибке g++: fatal error: -fuse-linker-plugin, but liblto_plugin-0.dll not found compilation terminated Запускаю: g++ -print-search-dirs в ответ получаю
C++ STL, что такое iterator? http://www.cyberforum.ru/cpp-beginners/thread1633337.html
Взываю о помощи ко всему прогрессивному человечеству, Что это: vector<float>::iterator iter;
C++ Правильное удаление массива по указателю из списка Не удаляется массив символов в структуре. Комментарий в коде удаления. Структура: struct pointDir { char *data; pointDir *next; подробнее

Показать сообщение отдельно
Kirik516
6 / 6 / 0
Регистрация: 27.12.2014
Сообщений: 66
07.01.2016, 17:39     Раздельная компиляция (нюансы использования заголовочных файлов и файлов реализации)
Цитата Сообщение от SergioO Посмотреть сообщение
в чем преимущество поступать именно так, а не как я? ну, функции ниже класса записать как class::func(){}думаю не трудно, но принципиально то потом все закомпилится ведь...
Подключать в этом случает надо так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// h_file.h
#include <all>
#include <used>
#include <headers>
 
class DeclareTheClass
{
// объявляем то, что нам нужно
};
 
//cpp_file.cpp
#include "h_file.h"
 
// реализуем все, что нужно
 
//main_file.cpp
#include "h_file.h"
 
// точка входа в программу
Для чего это делается?
Если реализовать класс внутри его объявление, ты вы неявно попросите компилятор сделать все методы inline.
Чтобы контролировать эти просьбы нужно разделить реализацию и объявление.
Если реализовывать методы в том же файле, что и объявление, то при каждом подключение этого файла, будет
копироваться код реализации. И скорее всего при многократном подключении этого файла, вы получите ошибку
о том, что один и тот же метод несколько раз реализован.
Так как директива #include <some_file> заставит препроцессор полностью скопировать содержание этого файла
в место вызова директивы.

Также hoggy, довольно подробно описал значимость разделения объявления и реализации.

Также не стоит забывать и о следующей конструкции в заголовочных файла, которая предотвращает бесконечное
вложение.
C++
1
2
3
4
5
//h_file.h
#ifndef H_FILE_H
#define H_FILE_H
// все что нам нужно
#endif // H_FILE_H
Добавлено через 2 минуты
Цитата Сообщение от SergioO Посмотреть сообщение
Хороший бы задачник с решениями по С++, как в математике чтобы, но чет такого не нахожу.
Есть в интернете сайты, к сожалению не помню адресов, для подготовки к олимпиадам по программированию.
В них хорошие задачи. Причем, там есть система проверки ответа. Загружаете программу на сайт и она там тестируется
автоматически.
 
Текущее время: 09:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru