stdafx.h включает предварительно скомпилированные заголовки. Исходя из данной ошибки и обсуждения того, как Microsoft реализует предварительно скомпилированные заголовки, кажется, что компилятор просто начинает компиляцию, начиная с включения stdafx.h. Поэтому, когда stdafx.h помещается после iostream, iostream не включается, вызывая загадочную ошибку.

дал консольное приложение C ++ в Visual Studio Community 2017. В проекте есть только файл main.cpp. Вот мой файл main.cpp:

#include <iostream>
#include "stdafx.h"

int main()
{
    std::cout << "hello world!";
    return 0;
}

Я получаю ошибку компиляции, что 'cout' не является членом std. Но если я включу iostream после stdafx.h, то есть

#include "stdafx.h"
#include <iostream>

int main()
{
    std::cout << "hello world!";
    return 0;
}

тогда он компилируется просто отлично. Так почему же это не работает, когда я включаю iostream перед stdafx.h?