#include быть проигнорированным - PullRequest
0 голосов
/ 23 июня 2010

Итак,

У меня есть этот код, который я пытаюсь обновить. Он был написан для Visual Studio 6, и я пытаюсь собрать его в Visual Studio 2010.

В stdafx.h он включает в себя afx.h и afxwin.h и несколько других вещей, необходимых для работы программы. Примечательно, что в других заголовочных файлах используется CString.

В начале include в stdafx.h я добавил сообщение #pragma, чтобы убедиться, что оно компилируется первым. В верхней части заголовочного файла есть еще один, который также выдает ошибку. Из выходных данных компилятора видно, что сначала компилировался stdafx.h, и это хорошо.

Однако произошла ошибка. (CString не был распознан как тип.) Итак, я решил убедиться, что он прошел через все включения. Итак, я поставил еще одно сообщение #pragma после #include, и это сообщение не печатается.

Означает ли это, что на самом деле это не включено?

Ответы [ 3 ]

1 голос
/ 23 июня 2010

Ваше объяснение немного сложное, но я думаю, что вы сталкиваетесь с различиями между обычной компиляцией и предварительно скомпилированными заголовками.

С предварительно скомпилированными заголовками компилятор обрабатывает первый файл нормально(для этого мастер нового проекта настраивает stdafx.cpp).После обработки включаемого файла (обычно stdafx.h), заданного в параметрах проекта для управления предварительной компиляцией, компилятор сохраняет свое состояние в файле .pch.

Для всех остальных файлов компилятор просматривает файл безлюбая обработка, просто ищу включаемый файл.Затем он читает файл .pch, загружает сохраненное состояние и продолжает обычный синтаксический анализ и компиляцию.

Одним из следствий этого дизайна является то, что любые строки выше #include "stdafx.h" в stdafx.cpp становятся частью состояния ивидно по всем другим файлам.А строки выше #include "stdafx.h" в других файлах просто игнорируются.

0 голосов
/ 23 июня 2010

Передача моего комментария к ответу.

CString в VS 6 раз был классом, и впоследствии он изменился на шаблон. Может быть, это как-то связано с этим?

Проблема была связана с использованием typedef с CString. Пост VS 6, это невозможно. Я только что изменился ссылки от руки, и он компилирует Теперь.

0 голосов
/ 23 июня 2010

Проблема была связана с использованием typedef с CString. Пост VS 6, это не возможно. Я просто изменил ссылки вручную, и теперь он компилируется.

...