如何在C++类中对C源文件中结构体对象进行调用

guirenwang 2009-05-27 08:57:20
大家好,小弟最近需要在一个已经写好的C源文件中调用一个结构体,而这个结构体的对象又在一个C++文件中以私有方式声明定义,现在在调用该结构体的成员时,爆出一个错误illegal use of incomplete struct/union/class 'JSON_parser_struct',不知道该怎么解决。。谢谢各位!
...全文
500 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
guirenwang 2009-05-27
  • 打赏
  • 举报
回复
我最后还是把那些结构体的声明定义,枚举变量的定义都移到.h头文件里面了。编译就不会报错了,谢谢各位。。
结贴了。。。
光宇广贞 2009-05-27
  • 打赏
  • 举报
回复
写一个头文件。让CPP文件引用。
czfnaruto 2009-05-27
  • 打赏
  • 举报
回复
把 .c改成 .h
include 到 JSONHandler.h 之前试试
guirenwang 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 goodname 的回复:]
/***********
* JSONHandler.h
************/
class CJsonHandler: public CActive
{
public:
static int GetValues(void* ctx, int type, const JSON_value* value);
...
private:
static struct JSON_parser_struct* iJc;//声明
};

/***********
* JSONHandler.cpp
************/

struct JSON_parser_struct* CJsonHandler::iJc;//这里定义一下

int CJsonHandler::GetValues(void* ctx, int type, const …
[/Quote]
谢谢,我去试试。。。
guirenwang 2009-05-27
  • 打赏
  • 举报
回复
前面各位讲的分配内存其实我都有做,只是为了简化代码让各位看起来更加方便所以就没有写上去,但是这个是编译错误,我认为主要是这个结构体在声明的时候是在.c的源文件中,不知道应该怎样弄才可以将这个.c的源文件给包到.cpp中,让编译器可以识别。
pathuang68 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 goodname 的回复:]
静态变量在类中定义仅仅相当于声明,

所以在你的cpp文件中应该加上定义,并初始化一下。
[/Quote]
正确!
goodname 2009-05-27
  • 打赏
  • 举报
回复
/***********
* JSONHandler.h
************/
class CJsonHandler: public CActive
{
public:
static int GetValues(void* ctx, int type, const JSON_value* value);
...
private:
static struct JSON_parser_struct* iJc;//声明
};

/***********
* JSONHandler.cpp
************/

struct JSON_parser_struct* CJsonHandler::iJc;//这里定义一下

int CJsonHandler::GetValues(void* ctx, int type, const JSON_value* value)
{

//必须有个地方初始化一下,也可以在别的函数中
//if(iJC == NULL)
// iJc = malloc(sizeof(struct JSON_parser_struct));
//...

............
TInt state = iJc->stack[iJc->top]//出错
............
}
czfnaruto 2009-05-27
  • 打赏
  • 举报
回复
JSON_parser_struct* iJc; //iJc也是指针也应该先分配内存
guirenwang 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 coverallwangp 的回复:]
直接引用结构体所在的c的头文件不就行了

要不lz贴代码吧
[/Quote]

这个结构体是定义在.c源文件中,我试着把它移到.h文件中,但是后面会爆一堆错(因为这个是开源的Json文件解析库,我不想过多的修改),所以就放弃了,到这里看看各位高手有没有其他的方法。。。
czfnaruto 2009-05-27
  • 打赏
  • 举报
回复
signed char* stack; //是指针应该分配内存

TInt state = iJc->stack[iJc->top]//没有分配内存不能使用

goodname 2009-05-27
  • 打赏
  • 举报
回复
静态变量在类中定义仅仅相当于声明,

所以在你的cpp文件中应该加上定义,并初始化一下。
guirenwang 2009-05-27
  • 打赏
  • 举报
回复
谢谢各位的关注,我已经把代码贴出来了,希望大家帮小弟看看。。。
dannylee322 2009-05-27
  • 打赏
  • 举报
回复
能直接引用那个h文件吗
guirenwang 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 98440622 的回复:]
C代码中调用C++代码?建议楼主举个例子说明最好

帮顶
[/Quote]
是在c++中定义一个C代码中的结构体,然后调用。。。

/***********
* JSON_parser.c
************/
typedef struct JSON_parser_struct {
JSON_parser_callback callback;
void* ctx;
signed char state, before_comment_state, type, escaped, comment, allow_comments, handle_floats_manually;
long depth;
long top;
signed char* stack;
long stack_capacity;
signed char static_stack[JSON_PARSER_STACK_SIZE];
char* parse_buffer;
size_t parse_buffer_capacity;
size_t parse_buffer_count;
size_t comment_begin_offset;
char static_parse_buffer[JSON_PARSER_PARSE_BUFFER_SIZE];
} * JSON_parser;

/***********
* JSONHandler.h
************/
class CJsonHandler: public CActive
{
public:
static int GetValues(void* ctx, int type, const JSON_value* value);
...
private:
static struct JSON_parser_struct* iJc;
};

/***********
* JSONHandler.cpp
************/
static int CJsonHandler::GetValues(void* ctx, int type, const JSON_value* value)
{
............
TInt state = iJc->stack[iJc->top]//出错
............
}
xqls_xqls 2009-05-27
  • 打赏
  • 举报
回复
把代码贴出来看看,,
aaaa3105563 2009-05-27
  • 打赏
  • 举报
回复
帮顶··
wanglchr 2009-05-27
  • 打赏
  • 举报
回复
关注!
coverallwangp 2009-05-27
  • 打赏
  • 举报
回复
直接引用结构体所在的c的头文件不就行了

要不lz贴代码吧
98440622 2009-05-27
  • 打赏
  • 举报
回复
C代码中调用C++代码?建议楼主举个例子说明最好

帮顶

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧