如何从c中访问cpp类中的结构变量?

时间:2010-01-26 09:04:32

标签: c++ c

示例例如:

messageStruct.hpp

class MessageStructure_t{

public:

struct MsgData_t {

   float a;
   int i;

}__attribute__((packed))msgdata_m;

};//classs end

我的项目Application.c中有一个文件。我需要在这里访问结构变量。 两者都不同,一个.hpp和另一个.c

我该怎么做?

希望得到你的关注。

3 个答案:

答案 0 :(得分:3)

您可以在单独的标头msg_data.h中定义结构,然后将其包含在两个项目中。如果需要,您可能必须将MessageStructure_t指针设置为MsgData_t。

因此MsgData.h:

struct MsgData_t {
   float a;
   int i;
}__attribute__((packed));

messageStruct.hpp:

#include "MsgData.h"

class MessageStructure_t {
  public:
    MsgData_t msgdata_m;
}

Appliaction.c:

#include "MsgData.h"

//...

答案 1 :(得分:2)

当你想从C访问C ++类及其对象时,有一些众所周知的模式。谷歌为他们。

一个简单的方法是将它包装在一块OO C中:

typedef void* my_handle_t;

handle_t create(void);  // returns address of new'ed object
void destroy(handle_t); // deletes object

MsgData_t* get_data(handle_t); // returns address of data in object

这就留下了如何从C中访问MsgData_t的问题。我看到了三种可能性:

  1. 将其定义移到自己的标题中(IMO最好,但你已经说过你不允许这样做了)
  2. 复制其定义(简单,但IMO最差的替代方案)
  3. 摆弄预处理器(#ifndef __cplusplus)以使C ++头可以被C解析器访问(hackish,但避免了#2的代码重复)

答案 2 :(得分:1)

我认为最好的方法是创建一个extern“C”函数来访问结构。