求解:編譯順序問題
環境:VC Express 2008
如下代碼,編譯失敗。
classA.h

#ifndef __CLASSA_H__
#define __CLASSA_H__
#include <vector>
#include "nameA.h"
class CA

{
public:
typedef std::vector<int> TVector;
public:
CA()
{}
};
#endif

nameA.h
#ifndef __NAMEA_H__
#define __NAMEA_H__
#include "classA.h"
namespace NA

{
typedef int INT;
class CB

{
public:
CB();
void Func(CA::TVector& vct);
};
}
#endif
main.cpp
#include "classA.h"
#include "nameA.h"
int main()

{
return 0;
}
編譯錯誤為:
1>------ Build started: Project: namespace, Configuration: Debug Win32 ------
1>Compiling
1>main.cpp
1>d:\temp\namespace\namea.h(15) : error C2653: 'CA' : is not a class or namespace name
1>d:\temp\namespace\namea.h(15) : error C2061: syntax error : identifier 'TVector'
1>Build log was saved at "file://d:\Temp\namespace\Debug\BuildLog.htm"
1>namespace - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========這個錯誤是典型的引用順序引起的,修改main.cpp中的#include順序可以編譯成功。
#include "nameA.h"
#include "classA.h"
int main()

{
return 0;
}
或者在classA.h中刪除對nameA.h的引用也可。
#ifndef __CLASSA_H__
#define __CLASSA_H__
#include <vector>
//#include "nameA.h"
class CA

{
public:
typedef std::vector<int> TVector;
public:
CA()
{}
};
#endifOK,現在問題如下,若classA.h需要引用nameA.h時,該如何解決這個問題?
classA.h如下所示時。
#ifndef __CLASSA_H__
#define __CLASSA_H__
#include <vector>
#include "nameA.h"
class CA

{
public:
typedef std::vector<NA::INT> TVector;
public:
CA()
{}
};
#endifposted on 2010-06-11 17:03 codejie 閱讀(1933) 評論(12) 編輯 收藏 引用 所屬分類: C++

