Откуда компилятор знает о существование объекта?
Откуда компилятор знает о существование объекта?
Header.h:
void sd() {
SD sd;
}
Header1.h:
class SD {};
Source.cpp:
#include "Header.h"
#include "Header1.h"
Так как препроцессор вставляет вместо директивы include содержимое файла. Получается что препроцессор передаёт компилятору файл в следующем виде:
void sd() {
SD sd;
}
class SD {}
Как я могу тогда использовать объект SD если он ещё не опеределён?
Ответы (1 шт):
string Это стандартная библиотека она находится по стандартному пути потому препроцессор знает этот путь и вместо #include <string> вставляет в файл код класса. Получается вверху страницы перед int main(int argc, char* argv[]){} вместо #include <string> появляется код класса string препроцессор просто копирует его туда. Если класс не стандартный, написанный Вами тогда Вы его вставляете таким образом #include "Путь/к/myclass.h". Препроцессор идет по тому пути который Вы указали и копирует оттуда необходимый класс.
Вы описали неправильно взаимодействие вставляемых файлов директивой #include потому Ваш код не будет работать. Чтобы он заработал нужно правильно определить куда необходимо вставлять заголовочные файлы. То есть какой файл от какого зависит. Код должен выглядеть как-то так:
header.h
#include "header1.h"
SD sd()
{
SD sd;
return sd;
}
header1.h
#include <iostream>
class SD
{
public:
SD()
{
std::cout <<
"A'm class " <<
typeid(this).name() <<
std::endl;
}
};
source.cpp
#include "header.h"
int main(int argc, char **argv)
{
sd();
return 0;
}