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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
micha12
0 / 0 / 0
Регистрация: 20.01.2009
Сообщений: 118
#1

Запутался с #include "..." и Linker, как это работает ??? - C++

13.10.2009, 01:57. Просмотров 1289. Ответов 3
Метки нет (Все метки)

Всем привет,

(1)

Я не могу до конца понять, как подключить библиотеку .lib или .obj к моей программе.

Итак, пусть в моей программе есть один файл Main.cpp, и в самом начале этого файла я пишу #include 'MyHeader.h'. В этом заголовочном файле определены нужные мне классы, но реализованы они в другом файле, MyCpp.cpp.

#include 'MyHeader.h' просто вставляет содержимое этого файла в файл Main.cpp, и все. А как дальше компилятор может найти мой файл .cpp?

Я рассуждаю здесь так. В ходе компиляции моего файла MyCpp.cpp образовался файл .obj, и я добавляю папку, в которой хранится этот файл, в Project Settings / Linker в текстовое поле, куда надо вроде бы вводить папки с файлами .lib и .obj. Правильно ли я делаю? А то у меня ничего не работает.

(2)

И еще: пусть у меня большой проект, в нем очень много классов, то есть много файлов .cpp и .h. Они нужны друг другу, поэтому я где надо добавляю #include 'File1.h' в файлы .cpp и .h. Эти добавления наслаиваются друг на друга, и в итоге получаются ошибки повторного определения классов. Как справиться с этой проблемой, чтобы все было удобно?

Надеюсь, что мне помогут. Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2009, 01:57     Запутался с #include "..." и Linker, как это работает ???
Посмотрите здесь:
Как это работает (недокументированное использование оператора "запятая")? C++
Не работает #include "md5.h" C++
Вопрос "хорошего тона", "стиля" в программировании - правильное использование #include C++
C++ #include "Sales_item.h" - ошибка "включаемый файл включает самого себя"
C++ Как правильно сделать #include "Sales_item.h" ?
C++ Какая разница между #include<> и #include""?
C++ Что такое "bool " и #include <algorithm>? Кто знает , как они работают ?
C++ Заменить всякое вхождение слова "это" на слово "то"
C++ хочу попробовать всунуть "for (int j=0; j<5; j++)" в cin. Как это можно реализовать?
У меня в задании "Parser xml нужно реализовать самостоятельно." - это как? C++
"динамически выделяет массив указателей на базовый класс" - как это понять? C++
Патерн "прототип" не работает, выдаёт ошибку "недопустимый вызов нестатической ф-ции", где я в коде ошибка? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kostushock
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 24
15.10.2009, 12:31     Запутался с #include "..." и Linker, как это работает ??? #2
1: Включаешь в проект файл MyCpp.cpp - делается это из меню Progect->Add to progect. В этом случае твой файл MyCpp.cpp будет компилиться при сборке проекта, при компиляции будет формироваться файл MyCpp.obj, и линковщик найдет все необходимые функции. Если исходного MyCpp.cpp файла нет, а есть только MyCpp.h и MyCpp.obj, то можно включить в проект (опять из меню Progect->Add to progect) файл MyCpp.obj. Тогда на стадии линковки функции, описанные в заголовочном файле MyCpp.h, будут искаться и в объектном файле MyCpp.obj, и никаких ошибок типа 'unresolved external' не будет. Проект соберется нормально.

2: В заголовочном файле File1.h пиши примерно следующее:

Код
#ifndef File1H
#define File1H

... Заголовки функций, классов и пр...

#endif
Здесь File1H - любое имя (должно быть уникально для каждого заголовочного файла *.h). Когда компилятор встретит диррективу #include 'File1.h', то он определит переменную File1H и включит все нижеописанные заголовки. Наслоения не будет происходить из-за того, что при повторной попытке определения этих классов сработает дирректива #ifndef File1H, переменная File1H уже определена при первом включении всех заголовков, таким образом будет сразу осуществлен переход к #endif, и никаких повторных определений не произойдет.
kostushock
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 24
15.10.2009, 13:10     Запутался с #include "..." и Linker, как это работает ??? #3
Да, первый пункт написан для Borland, а не для Microsoft C++. Но в майкрософте смысл тот же - включить файлы в проект.
micha12
0 / 0 / 0
Регистрация: 20.01.2009
Сообщений: 118
22.10.2009, 02:21  [ТС]     Запутался с #include "..." и Linker, как это работает ??? #4
Большое спасибо за помощь. А то я просто офигел от этих ошибок, каждый раз надо было думать о том, где какой #include писать. Спасибо большое!

Кстати, я обнаружил еще #pragma once. Кажется, достигается тот же эффект.
Yandex
Объявления
22.10.2009, 02:21     Запутался с #include "..." и Linker, как это работает ???
Ответ Создать тему
Опции темы

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