我遇到了一些我不太了解的怪异现象。
我收到如下错误:
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,我显然在做:
#include "CP_String.h"
如果我去看看CP_String.h和.cpp,它们似乎很好。
它们都在同一目录中,等等。
我应该寻找什么?
这是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;
最佳答案
如果确定不是循环包含,那么请记住,您始终可以退回到经常被忽略的技术,即使用适当的编译器开关仅转储预处理的源代码,即在执行编译阶段之前将其停止。搜索该输出,您将发现编译器为何抱怨,因为您现在正在查看编译器看到的内容。
该选项在MSVC中为/E,在gcc中为-E。
关于c++ - 解决标识符 “xxx”未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1289172/