Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

подключение h-файлов

2.6K
19 февраля 2005 года
kupyxa
35 / / 20.10.2004
Создал для себе небольшой модуль с функциями. Объявление функций в head-файлах, реализация - в *.cpp. В общем, все как положено. Проблема в следующем: когда я в другом проекте подключаю свой модуль (head-файл), линковщик выдает ошибку. Приходится включать в проект также и файл реализации функций. Как этого избежать??
487
19 февраля 2005 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by kupyxa
Создал для себе небольшой модуль с функциями. Объявление функций в head-файлах, реализация - в *.cpp. В общем, все как положено. Проблема в следующем: когда я в другом проекте подключаю свой модуль (head-файл), линковщик выдает ошибку. Приходится включать в проект также и файл реализации функций. Как этого избежать??



А чего ты хочешь собственно избежать?
Для компиляции программы head файла недостаточно (если конечно ты в нем не напишешь реализацию того чего в нем объявлено).

head файл собственно служит для определения прототипов того чего будет компиляться. А компиляется уже как-раз .cpp. Если ты его не подключишь - собственно и компиляться ничего не будет. Соответсвенно и получаешь то о чем пишешь.

Можешь конечно не таскать .cpp - таскать его объектник (.obj) - или скомпиляй либу (.lib). Но не проще-ли просто подключить к новому проекту готовый .cpp?

301
19 февраля 2005 года
lord Kelvin
897 / / 08.11.2004
Цитата:
Originally posted by kupyxa
Создал для себе небольшой модуль с функциями. Объявление функций в head-файлах, реализация - в *.cpp. В общем, все как положено. Проблема в следующем: когда я в другом проекте подключаю свой модуль (head-файл), линковщик выдает ошибку. Приходится включать в проект также и файл реализации функций. Как этого избежать??


А *.h файл не нужно подключать к проекту. Нужно подключать *.cpp, *.obj, *.lib (как уже было сказано ddnh_bc). *.h файл используется так

 
Код:
#include<*.h>
2.6K
19 февраля 2005 года
kupyxa
35 / / 20.10.2004
Цитата:
Originally posted by lord Kelvin

А *.h файл не нужно подключать к проекту. Нужно подключать *.cpp, *.obj, *.lib (как уже было сказано ddnh_bc). *.h файл используется так
 
Код:
#include<*.h>



Хорошо, допустим. Но ведь когда я использую библиотеки MFC или даже стандартные, например "iostream". Я ведь не подключаю никаких *.cpp файлов, а просто пишу вначале #include "iostream.h". Хотя реализация, я так понимаю, у них находится отдельно, в файлах *.cpp

487
20 февраля 2005 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by kupyxa


Хорошо, допустим. Но ведь когда я использую библиотеки MFC или даже стандартные, например "iostream". Я ведь не подключаю никаких *.cpp файлов, а просто пишу вначале #include "iostream.h". Хотя реализация, я так понимаю, у них находится отдельно, в файлах *.cpp



Дорогой товарищ!
А что есть собственно MFC? Или стандартные библиотеки? Как и все SDK это набор уже скомпилированных *.lib файлов с набором прототипов определенных в .h файлах. В любом проекте открой Project Settings - закладочку Link и посмотри Object/Library modules. Не для красоты же они там присутствуют....
Это все библиотеки, используемые линковщиком при сборке твоего проекта в .exe файл. Это как раз те самые .cpp файлы предварительно скомпилированные в библиотеки из которых линковщик вынимает нужные куски и вставляет в *.exe. Вот собственно и все. Ничего тайного.

Просто сам подумай - данные из воздуха не берутся.
Они где-то в любом случае должны быть. Это база. Уж такие-то вещи нужно знать.

2.6K
20 февраля 2005 года
kupyxa
35 / / 20.10.2004
Хорошо. Тогда резонный вопрос: как я могу создать свою библиотеку?
487
21 февраля 2005 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by kupyxa
Хорошо. Тогда резонный вопрос: как я могу создать свою библиотеку?



File->New->Projects->Win32 static library.

Вопрос можно? А зачем тебе столько гемора ради одного файла? Ты дольше с либой возиться будешь - судя по вопросам которые задаешь. Поверь на слово - подключить 1 файл к новому проекту гораздо легче. Если конечно у тебя в нем не 1 МБ текстового кода, что без либы уж прям никуда.

2.6K
21 февраля 2005 года
kupyxa
35 / / 20.10.2004
Цитата:
Originally posted by ddnh_bc


File->New->Projects->Win32 static library.

Вопрос можно? А зачем тебе столько гемора ради одного файла? Ты дольше с либой возиться будешь - судя по вопросам которые задаешь. Поверь на слово - подключить 1 файл к новому проекту гораздо легче. Если конечно у тебя в нем не 1 МБ текстового кода, что без либы уж прям никуда.



А как же принципы инкапсуляции? Пользователь должен знать только то, что он знать должен и ничего, кроме этого :)

487
21 февраля 2005 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by kupyxa


А как же принципы инкапсуляции? Пользователь должен знать только то, что он знать должен и ничего, кроме этого :)



Ты это пишешь для внутреннего пользования или это предпологается end-user SDK? Если второе - тогда уж разбирайся как либы делать - либо таскай вместо *.cpp его объектник *.obj. А если для внутреннего - еще раз повторюсь - зачем лишний гемор на задницу?

279
22 февраля 2005 года
bave
456 / / 07.03.2004
Вот когда-то и я таким вопросом мучался и мне
чё папало отвечали.
Вообще, понятно чё тебе надо:
- в хедоре написать итерфейс
- в .cpp реализацию, причём не в основном .cpp,
а в другом: делается это так:

У тебя есть основной исходник main.cpp,
та подключаешь к нему свой хедер
(пусть name1.hpp.)в нём у тебя обьявлены класс или функции.
затем создаёшь name1.cpp (имя такое же).
и в нутри него тоже подключай name1.hpp.
2.6K
22 февраля 2005 года
kupyxa
35 / / 20.10.2004
Цитата:
Originally posted by bave

У тебя есть основной исходник main.cpp,
та подключаешь к нему свой хедер
(пусть name1.hpp.)в нём у тебя обьявлены класс или функции.
затем создаёшь name1.cpp (имя такое же).
и в нутри него тоже подключай name1.hpp.



Спасибо. Только я так понял, надо, наоборот, в name1.hpp подключать name1.cpp. Причем имя необязательно должно совпадать. Получается как будто пишем реализацию прямо в h-файл, но пользователь видит только интерфейс :)
Но здесь возникает другая проблема: локальные функции моего cpp-файла будут открыты, а значит, возможны конфликты имен. Как это можно избежать?

2.6K
22 февраля 2005 года
kupyxa
35 / / 20.10.2004
Цитата:
Originally posted by rostyslav
Если локальные ф-ии не определены в hpp файле, тогда они не открыты.
Конфликт имен можно избежать используя namespace.



Namespace я и использую. Но некоторые функции хотелось бы сделать невидимыми для пользователя. Есть ли в namespace'ах методы для этого (например, как private для классов)?

279
22 февраля 2005 года
bave
456 / / 07.03.2004
2 kupyxa

Не, не так. Никогда не делай #include "*.cpp".

Вот щас понятней попробую:

//main.hpp:

#include <.....h>
#include <.....h>
#include <.....h>
.........

//main.cpp

#include "main.hpp"
#include "name1.h"
......

//name1.hpp:

#include "main.hpp"
......
//name1.cpp:
#include "name1.hpp"

Вот вроде так. Постороаюсь к завтрому у себя пример рабочий поприличней найти и здесь выложу.
2.6K
24 февраля 2005 года
kupyxa
35 / / 20.10.2004
Цитата:
Originally posted by bave
2 kupyxa
<...>
Вот вроде так. Постороаюсь к завтрому у себя пример рабочий поприличней найти и здесь выложу.



Попробовал - не работает :(
Ты хотел пример показать??

279
26 февраля 2005 года
bave
456 / / 07.03.2004
Цитата:
Originally posted by kupyxa


Попробовал - не работает :(
Ты хотел пример показать??



Эх, чуть не забыл :-)
Вот - я не оригинален, Hello World и сумма
двух чисел из другог *.cpp

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог