messageStruct.hpp
class MessageStructure_t{
public:
struct MsgData_t {
float a;
int i;
}__attribute__((packed))msgdata_m;
};//classs end
我已經在我的項目Application.c文件。我需要在這裏訪問結構變量。 兩者是不同的,一個.HPP和其他.C
我怎樣才能做到這一點?
希望你的關注。
messageStruct.hpp
class MessageStructure_t{
public:
struct MsgData_t {
float a;
int i;
}__attribute__((packed))msgdata_m;
};//classs end
我已經在我的項目Application.c文件。我需要在這裏訪問結構變量。 兩者是不同的,一個.HPP和其他.C
我怎樣才能做到這一點?
希望你的關注。
您可以定義在一個單獨的頭細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"
//...
我認爲最好的方式是創建一個外部「C」功能訪問該結構。
但是,即使這也引發了一個問題,那就是如何將一個類實例從C. – sbi 2010-01-26 09:38:04
@sbi傳遞給該方法。我不確定對此有何不確定性或神祕性。你可以創建包裝這些方法的'extern「C」'函數。如果需要的話,你也可以編寫一個'MessageStructure_Create()'來包裝'new'和構造函數,'MessageStructure_Free()'來包裝'delete'。不知道該類型應該是什麼?從'void *'做一個'typedef'。您可以爲字段編寫訪問器函數。 – asveikau 2010-01-26 09:49:13
@asveikau:見http://stackoverflow.com/questions/2138337/how-to-access-a-structure-variable-which-is-inside-a-cpp-class-from-c/2138546#2138546': O)' – sbi 2010-01-26 09:56:20
當你想從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
這使得如何讓MsgData_t
從C.訪問的問題,我看到三種可能性:
#ifndef __cplusplus
),使一個C解析器的C++頭訪問(hackish的,但避免了#2的代碼重複)
注:.HPP和.c的只是文件擴展名。您應該談論語言,如果這是您的擔心,例如「如何從C模塊訪問C++結構」或類似的東西。 – 2010-01-26 09:12:15
感謝您的信息我們的主席 – user46646 2010-01-26 09:16:09
如果我理解正確,您有一個C++類的實例,並且您需要從C中訪問該實例的數據字段。但是這隻會引出C如何訪問該對象的問題?當然,C無法傳遞類實例。那麼你在C中已經擁有了什麼? – sbi 2010-01-26 09:25:23