我遇到了一些我不太了解的怪异现象。

我收到如下错误:

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/

10-09 06:38