Учитывая приведенный ниже файл A.h (обратите внимание, что я намеренно не включил заголовок <iostream> в этот файл). Затем текстовый редактор VS2010 показывает красную линию под std, так как не распознает это имя.
class A
{
public;
A() throw(std::bad_alloc);
};
Но если я включу заголовок <iostream> в файл A.cpp, как показано ниже, красная строка исчезнет в файле A.h, даже когда A.cpp закрыт. Как это возможно ?
#include <iostream>
#include "A.h"
A::A() { throw std::bad_alloc(); }
Ответ 1 · рейтинг 1 · mgiuffrida
Добавьте новый файл C++, который включает A.h, но не включает <iostream>. Красное подчеркивание под std снова появится.
VS2010 знает, какие файлы включают этот заголовочный файл. Если кто-то из них не знает о std, он укажет на проблему.
Но вы правы, если вы измените порядок включений, чтобы проект не компилировался, он все равно удалит красную подчеркивание.
Ответ 2 · Nicol Bolas
Visual Studio написана для всех программистов на C++. Это означает, что он не может предполагать, что заголовочные файлы всегда включают в себя все, что им нужно. Помещать красные линии под все, что явно не включено в заголовок, означало бы много ложных срабатываний для тех разработчиков, которые работают в строгой среде, где заголовки включаются в определенном порядке с зависимостями.
Таким образом, Visual Studio пытается выяснить, что вы имеете в виду, вместо того, чтобы предполагать, что ваши заголовки могут стоять сами по себе.
Это может быть не лучшая практика в вашем источнике, но они должны учитывать это.