2009-08-17 20 views
2

私はかなり理解していない何か変わったことを経験しています。解決識別子 "xxx"は定義されていません

私はのようなエラーが発生します:

framework/CP_STLArrayDefines.h(37): error: identifier "CP_String" is undefined 
    typedef std::vector<CP_String, std::allocator<CP_String> >      CP_Strings_Array; 
         ^
framework/CP_STLArrayDefines.h(37): error: identifier "CP_String" is undefined 
    typedef std::vector<CP_String, std::allocator<CP_String> > 

しかし、私はCP_STLArrayDefinesで見て行けば、私ははっきりとやっている:私はCP_String.hを見て、.CPPを行けば

#include "CP_String.h" 

を、彼らがいるようです良い。

彼らは両方とも、など、同じディレクトリにある

私は何の事を探してください?ここで

はCP_STLArrayDefine.hです:両方のファイルが互いを含めるようにしようとするよう

#ifndef CP_STLArrayDefines_H 
#define CP_STLArrayDefines_H 

#ifndef TARGET_OS_LINUX 
# pragma once 
#endif 

// CPLAT_Framework 
#include "CP_Point.h" 
#include "CP_String.h" 
#include "CP_Types.h" 

// Standard Library 
#include <vector> 

CPLAT_Begin_Namespace_CPLAT 

    // typedefs 
#if ! TARGET_OS_LINUX 
    typedef std::vector`<CP_String, std::allocator<`CP_String>` >`      CP_Strings_Array; 
    typedef std::vector`<CP_String, std::allocator<`CP_String>` >`::iterator   CP_Strings_Iterator; 
    typedef std::vector`<CP_String, std::allocator<`CP_String>` >`::reverse_iterator CP_Strings_ReverseIterator; 
+1

ファイルはCP_String.hと呼ばれますが、興味のあるクラスは確実ですか? –

+1

は、http://stackoverflow.com/questions/1282212/global-structs-not-being-seenの亜種のように聞こえます –

+0

また、ヘッダーファイル間に循環依存がないことを確認してください。 – Naveen

答えて

4

円形のインクルードではないことが確かな場合は、適切なコンパイラスイッチを使用して前処理されたソースをダンプする、つまりコンパイルフェーズを実行する前に停止することができます。その出力を検索すると、コンパイラが現在見ているようにコンパイラが不平を言っている理由がわかります。

オプションは、MSVCでは/ E、gccでは-Eです。

2

は多分またCP_String.hは、CP_STLArrayDefines.hが含まれていますか?ヘッダーファイルにガードをインクルードすると、記述したようなエラーが発生する可能性があります。

+0

CP_String.hにはCP_STLArrayDefines.hが含まれていません。各ヘッダーquardは右である:
#ifndefの_H_CP_STLArrayDefines の#define _H_CP_STLArrayDefinesと#ifndefの_H_CP_String の#define _H_CP_String – user147502

+2

もう一度、私はそれらのヘッダガード名が違法であることを指摘したいと思います。アンダースコアと大文字で始まる名前は、C++実装用に予約されています。 –

+0

@neil - ヘッダーガードはCP_STRING_Hにする必要がありますか?違法であるかどうかは、間違いの原因ではないでしょうか? – user147502

1

CP_String.hは適切に保護されていますか?私は、もちろん、ヘッダーのマルチ包含ガードを意味します。

CP_String.hの前に含まれているヘッダーの1つにガードで使用されているのと同じシンボルが含まれている可能性があります(コピーガードを1つのヘッダーから別のヘッダーにコピーするときに起こります)。

+0

ガードが正しい:#ifndef _H_CP_String #define _H_CP_Stringと#ifndef _H_CP_STLArrayDefines #define _H_CP_STLArrayDefines – user147502

0

私はあなたに答えを与えるための十分な情報がありませんが、私はあなたが見ているエラーの可能性のある原因について野生の推測をします。名前空間内でCP_Stringが宣言されていますか?もしそうなら、それは何ですか?私はと多分何らかの標準設定のような何かをすると仮定してマクロ呼び出し:CPLAT_Begin_Namespace_CPLATを見る。おそらく、あなたのコメントで述べた再編成のために、CP_StringはもはやCPLAT名前空間になくなり、コンパイラはそれを見つけることができません。