不能取消引用typedef结构指针的成员

时间:2015-04-16 09:34:43

标签: c++ struct pointer-to-member

我在名为CFLite.c的文件中有结构定义,如下所示

typedef struct CFLString    CFLString;
struct CFLString
{
    CFLObject       base;
    char *          data;
    size_t          size;
};

此结构在CFLite.h

中有一个typedef-ed指针
typedef struct CFLString *      CFLStringRef;

这又是CFCompat.h中#define-ed的

#include "CFLite.h"
#define CFStringRef                 CFLStringRef

现在,在本地函数中,我有一个简单的打印语句,其中包含标题CFCompat.h,其中我尝试打印成员变量data指向的字符串。

MyClass::PrintFunc(){
    CFLStringRef inVal;
    printf("--- str = %s ",inVal->data)     //<--- Compiler error here : 
`data` cannot be unresolved.

}

2 个答案:

答案 0 :(得分:3)

根据您的说明,struct CFLString的定义位于源文件CFLite.c中,而不是其他地方。这意味着在该文件之外的任何地方,类型struct CFLString都是不完整的,因此其成员是未知的。

如果要访问结构的成员,其定义必须可用(通常在标题中)。

答案 1 :(得分:1)

要取消引用inVal - 表达式inVal->data的作用,编译器需要可见的完整结构定义。

前瞻声明是不够的。

这意味着struct定义需要位于其中一个头文件中,并且该头文件需要(直接或间接)在所有尝试访问其成员的源文件中#include d struct