My header files all have include guards and none of them cross reference each other. The structure is as follows.

"main_header.h" defines type definitions and includes standard c++ headers, namely:
Code:
#include <string>
#include <vector>
#include <set>
#include <bitset>
#include <algorithm>
#include <iomanip>
#include <iostream>

class phone;

using std::string;
using std::wstring;
using std::vector;
using std::set;
using std::cout;
using std::endl;
using std::ostream;
using std::bitset;
using std::setw;
using std::setfill;
using std::less;
using std::ios;
using std::setiosflags;
"ipa.h" includes nothing and is only a list of constant definitions. The only thing of note is that this file is in unicode (which should not be an issue for VC++2003).

The following files include other headers of some sort:
  1. "units.h" which includes "main_header.h".
  2. "phone_initialize.h" which includes "units.h" and "ipa.h"
  3. "eval.h" which includes "units.h" and "phone_initialize.h"


I originally defined my "stdafx.h" as follows:
Code:
#pragma once

#include <string>
#include <sstream>
#include <iostream>
#include <fstream>
#include <bitset>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstdlib>
#include "eval.h"
#include "phone_initialize.h"
#include "main_header.h"
#include "units.h"
#include "ipa.h"
But for some reason, it wouldn't compile unless I commented out "#include ipa.h". Also, it would compile if and only if "phone_initialize.h" is not placed above "eval.h".

I guess you could say this is a trivial issue since I located the problems and got rid of it, but I have feeling this might blow up in my face someday unless I know why it's acting like this.

So if anyone can help me, I would really appreciate it.