У меня есть заголовочный файл, называемый Person.h:Заголовок спутанность порядок включения
class Person
{
public:
Person();
private:
std::string name;
};
Реализация находится в файле с именем Person.cpp:
#include <string>
#include "Person.h"
Person::Person()
{
name = "foo";
}
Я привык, чтобы избежать вложенной включая файлы, поэтому я #include
, заголовок <string>
, прежде чем включать заголовок класса в исходный файл класса.
Теперь это не скомпилировано с ошибкой, что std::string
не является определенным именем. Но если я включаю в заголовочный файл, он компилируется.
В сети я обнаружил, что в том числе заголовки, обращая внимание на порядок включения (что я регулярно делаю на C, мой основной язык), действительно должен работать (включая файлы, которые не скомпилированы сами по себе, а просто вставлены в исходный файл).
Итак, мой вопрос: почему он не компилируется без включения строкового заголовка в файл заголовка? Поскольку заголовочный файл «скопирован» в исходный файл после#include <string>
, я ожидаю, что он будет компилироваться просто отлично.
Хорошо, давайте рассмотрим ваши основные предположения. Почему именно вы «* использовали, чтобы избежать [in] вложенных файлов include *» (что я подразумеваю, включая заголовки из других заголовков)? – NPE
@NPE пожалуйста, ответ на мой вопрос. как я писал, он работает в C, я хочу знать, почему это не должно быть на C++, даже если я нашел в Интернете, что он должен быть – Luca
Если вы включаете заголовок в другие исходные файлы, возможно, вы не помните, чтобы включать строка в правильном месте в этих файлах. Который в конечном итоге является основной причиной включения всех файлов, необходимых для файла заголовка в этом заголовочном файле. –