Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

13.10.2009, 01:57. Просмотров 1366. Ответов 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. Эти добавления наслаиваются друг на друга, и в итоге получаются ошибки повторного определения классов. Как справиться с этой проблемой, чтобы все было удобно?

Надеюсь, что мне помогут. Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2009, 01:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запутался с #include "..." и Linker, как это работает ??? (C++):

Как это работает (недокументированное использование оператора "запятая")? - C++
Нашёл один велосипед в сети, можете объяснить как это работает? Что это за недокументированное использование оператора "запятая"? ...

Не работает #include "md5.h" - C++
Что это может быть?

Вопрос "хорошего тона", "стиля" в программировании - правильное использование #include - C++
Привет. Вступление. Имею небольшой опыт в программировании. Сейчас мне дали разобрать один проект, как пример работы HGE и Box2D. ...

#include "Sales_item.h" - ошибка "включаемый файл включает самого себя" - C++
Пишу в файле Sales_item.h следующее: #include "Sales_item.h" #include <iostream> void main() { Sales_item book; //тут...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно". Я так...

Как правильно сделать #include "Sales_item.h" ? - C++
#include <iostream> #ifndef Sales_Item_HPP #define Sales_Item_HPP #include "Sales_item.h" #endif Sales_Item_HPP using namespace...

3
kostushock
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 24
15.10.2009, 12:31 #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, и никаких повторных определений не произойдет.
0
kostushock
0 / 0 / 0
Регистрация: 09.04.2009
Сообщений: 24
15.10.2009, 13:10 #3
Да, первый пункт написан для Borland, а не для Microsoft C++. Но в майкрософте смысл тот же - включить файлы в проект.
0
micha12
0 / 0 / 0
Регистрация: 20.01.2009
Сообщений: 118
22.10.2009, 02:21  [ТС] #4
Большое спасибо за помощь. А то я просто офигел от этих ошибок, каждый раз надо было думать о том, где какой #include писать. Спасибо большое!

Кстати, я обнаружил еще #pragma once. Кажется, достигается тот же эффект.
0
22.10.2009, 02:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2009, 02:21
Привет! Вот еще темы с ответами:

Какая разница между #include<> и #include""? - C++
Позволите спросить несколько вопросов: 1)Какая разница между #include&lt;&gt; и #include&quot;&quot; 2)Если нужно значение объекта и я не собираюсь его...

Что такое "bool " и #include <algorithm>? Кто знает , как они работают ? - C++
Вот код: #include &quot;stdafx.h&quot; #include &lt;algorithm&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; bool...

Заменить всякое вхождение слова "это" на слово "то" - C++
Заменить каждое вхождение слова &quot;это&quot; на слово &quot;то&quot;. Прошу помощи! #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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