Я узнал, что если я компилирую main.cpp, то компилятор просто заменяет все включения фактическим содержимым файла, т.е. #include "LongClassName.h"
, текстом в этом файле.Это делается рекурсивно в LongClassName.h .В конце концов, компилятор видит огромный «виртуальный» файл с полным кодом всех файлов .cpp и .h.
Но в реальных проектах это кажется намного сложнее.Я посмотрел на Makefile Eclipse, созданный для моего проекта Qt, и кажется, что для каждого файла есть запись с именем file.o и его зависимостями являются file.cpp и file.h .Таким образом, это означает, что eclipse компилирует каждый .cpp отдельно (?)
Означает ли это, что class.cpp ничего не будет знать о глобальных вещах в main.cpp или в классе более высокого уровня, включая hirarchy?
Я наткнулся на эту проблему, пытаясь создать псевдоним для длинного имени класса.Это мой основной класс, и я хотел вызывать статические функции с более коротким именем: Ln :: globalFunction () вместо LongClassName :: globalFunction ()
Iесть класс LongClassName , заголовок которого я включаю в main.cpp.Это основной класс.Все остальные классы включены в него.
LongClassName.h
#define PI 3.14159265
#include <QDebug>
Class LongClassName
{
...
public:
...
private:
...
};
typedef LongClassName Ln;
LongClassName.cpp
#include "Class1.h"
#include "Class2.h"
#include "Class3.h"
/*implementations of LongClassName's functions*/
Поэтому я предположил, что когда код включается компилятором в один «виртуальный» файл, каждый класс будет вставлен после этого исходного кода, и поэтому каждый класс должен знать, что Ln является псевдонимом для LongClassName
Это не сработало
Так каков наилучший способ распространения этого псевдонима среди всех классов?
Я хочуизбегать включения LongClassname.h во все классы из-за обратных зависимостей.LongClassName включает в себя все другие классы в своей реализации.И почти все другие классы используют некоторые статические функции LongClassName.
(На данный момент у меня есть отдельный класс Ln , но я пытаюсь объединить его с LongClassName, потому что он кажется более логичным.)