简体   繁体   中英

VS 2008 - some parts of header not included?

I'm working under Visual Studio 2008, maybe that's important. In a larger project I decided to split one of my .cpp files into two. As I moved some of the functions to a new file, let's call it new.cpp , and tried to compile, I got errors that new.cpp doesn't know definitions of fstreams , setw() , etc. Now, at the very top of the new file I included my own header, let's call it main_header.h , which in turn includes all the necessary <iostream> , <iomanip> , etc. This works just fine all throughout older files used in this project, but for some reason doesn't in new.cpp .

If I add

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

in new.cpp then all works just fine, but that's not how I want to solve it. I thought maybe content of main_header.h doesn't get appended to new.cpp on compilation, but that's not true, I tried using in new.cpp an external variable declared in main_header.h and defined in yet different .cpp, and got no errors on compilation, linking, or running. Yet it seems like <fstream> and <iomanip> included in main_header.h do not make it to new.cpp file.

I'm relatively new to Visual Studio, so the solution to my problem is likely something silly I'm not aware of, but I spent a good while trying to figure this one out and to no avail. The new file is definitely part of the project, since building projects attempts to compile it, plus once I include iostream and iomanip in this new.cpp I can call its routines in other parts of the project. Any ideas what I might be doing wrong?

main_header.h looks like that

#ifndef MAIN_HEADER
#define MAIN_HEADER

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

#endif  // for MAIN_HEADER



Update: Ok, so the day after I created a whole new project using the same files and now all works fine, I don't need to include iomanip nor anything else in new.cpp. It sure as heck was to do with some oddities of VS not code itself, but still beats me what exactly was the issue.

This could be caused by prefix headers or precompiled headers, which can be set across the whole project, or could be set just on your new.cpp file, which might explain why there's some difference. Here's a few things to try:

  • Properties -> C++ -> Precompiled headers: check the setting for the whole project and for the individual files
  • Properties -> C++ -> Advanced -> Force includes: check this is the same for both
  • Open the vcproj file in a text editor and find the new.cpp node -- this is a quick way of finding if this individual file has different compiler settings
  • Properties -> C++ -> Preprocessor -> Generate Preprocessed file: this will generate an intermediate new.i file with all #includes and macros resolved. Compare the result of this for both files and look for the diffs -- this might show why one works and the other doesn't

Do you have another header somewhere that also has #define MAIN_HEADER ?

It's an easy mistake to make when creating a new header by copying an old one, and leads to mysterious symptoms like this.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM