VS 2008 - некоторые части заголовка не включены? - PullRequest
0 голосов
/ 18 мая 2011

Я работаю под Visual Studio 2008, может быть, это важно.В более крупном проекте я решил разделить один из моих файлов .cpp на два.Когда я переместил некоторые функции в новый файл, назовем его new.cpp и попытался скомпилировать, я получил ошибки, из-за которых new.cpp не знает определения fstreams, setw() и т. Д. Теперь, вв самом верху нового файла я включил свой собственный заголовок, назовем его main_header.h, который, в свою очередь, включает в себя все необходимые <iostream>, <iomanip> и т. д. Это прекрасно работает во всех старых файлах, используемых в этом проекте,но по какой-то причине не в new.cpp.

Если я добавлю

#include <fstream>
#include <iomanip>
// and all the rest

в new.cpp, тогда все будет работать нормально, но я не решаю эту проблему.Я подумал, что, возможно, содержимое main_header.h не добавляется к new.cpp при компиляции, но это не так, я попытался использовать в new.cpp внешнюю переменную, объявленную в main_header.h и определенную в еще одном .cpp, и получилнет ошибок при компиляции, компоновке или запуске.Тем не менее, кажется, что <fstream> и <iomanip>, включенные в main_header.h, не превращаются в файл new.cpp.

Я относительно новичок в Visual Studio, поэтому решение моей проблемы, вероятно, является чем-то глупым, о котором я не знаю, но я потратил много времени, пытаясь выяснить это, но безрезультатно.Новый файл определенно является частью проекта, так как сборка проектов пытается его скомпилировать, плюс, когда я включу iostream и iomanip в это new.cpp, я могу вызывать его подпрограммы в других частях проекта.Есть идеи, что я могу делать не так?

main_header.h выглядит так

#ifndef MAIN_HEADER
#define MAIN_HEADER

#include <iomanip>
#include <fstream>
// loads of other stuff

#endif  // for MAIN_HEADER



Обновление: ОК, так что на следующий день после того, как я создал целый новый проектиспользуя те же файлы, и теперь все работает нормально, мне не нужно включать iomanip и ничего другого в new.cpp.Конечно, черт возьми, это было связано с некоторыми странностями VS, а не с самим кодом, но все же меня опередило, в чем именно заключалась проблема.

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Это может быть вызвано префиксными заголовками или предварительно скомпилированными заголовками, которые могут быть установлены для всего проекта или могут быть установлены только в вашем файле new.cpp, что может объяснить, почему есть какая-то разница.Вот несколько вещей, которые можно попробовать:

  • Свойства -> C ++ -> Предварительно скомпилированные заголовки: проверьте настройку для всего проекта и для отдельных файлов
  • Свойства -> C ++ -> Дополнительно-> Force includes: проверьте, что это одинаково для обоих
  • Откройте файл vcproj в текстовом редакторе и найдите узел new.cpp - это быстрый способ найти, если этот отдельный файл имеет разные настройки компилятора
  • Свойства -> C ++ -> Препроцессор -> Создать предварительно обработанный файл: будет создан промежуточный файл new.i со всеми #include и разрешенными макросами.Сравните результаты этого для обоих файлов и посмотрите различия - это может показать, почему один работает, а другой нет
0 голосов
/ 18 мая 2011

У вас есть другой заголовок, в котором также есть #define MAIN_HEADER?

При создании нового заголовка, скопировав старый, легко ошибиться, что приводит к таинственным симптомам, подобным этому.

...