2013-07-08 72 views
0

假設我有以下代碼中,這樣的事情可能嗎? 我的意思是傳遞一個變量,它是一個C++對象到函數內。從類傳遞C++變量C函數

在foo.hpp

class foo 
{ 
    public : 

    int a; 
} 

在main.cpp中

#include "cfile.h" 
#include "foo.hpp" 

void main() 
{ 

    foo * fooPtr = new foo(); 
    int RetVal = MyCfunc(fooPtr->a); 
} 

在cfile.c

#include "cfile.h" 

int MyCfunc(int var) 
{ 

    var + = 1; 
    return var; 
} 
+0

'變種+ = 1;'不編譯。你打算寫'return var + 1';我想知道你爲什麼試圖在'MyCfunc'中增加'var'。您是否希望以調用者可見的方式修改該值? –

+0

此外,沒有'世界空隙main',只有'INT主()',或'INT主(INT的argc,字符* argv的[])' – billz

回答

3

技術上此編譯(當然,固定各種語法問題後有已被指出),但你必須小心。您需要確保一切都可以鏈接(即爲C和C++源代碼正確創建符號);我通常使用g ++作爲編譯器,對於C文件,它工作正常。其次,你必須確保告訴你的C++代碼你想引用C代碼。因此,在你的「cfile.h」要添加

#ifdef __clpusplus 
extern "C" { 
#endif 

// your C include file 

#ifdef __cpluspus 
} 
#endif 

這確保您可以包括你的C頭文件到C++源代碼,同時告訴C++編譯器利用C樣式名稱編譯代碼時重整。然後繼續前進,C和C++文件進行編譯,並將其鏈接到一個可執行文件:

g++ -g -O0 -o test main.cpp cfile.c 

還有更多的關於這個位置:Combining C++ and C - how does #ifdef __cplusplus work?

1

,如果你提供的是你的實際樣品會更好正在努力去做。正如其他人指出,你所提供的代碼有一些語法問題和傳遞C &之間基本類型的C++是大多從來就不是一個問題。 int在任何地方都是int(只要你不跨越32/64位邊界)。

在這裏你可以遇到麻煩時調用C/C++函數/從另一個側面方法或周圍路過類(使用指針,只有通過他們,通常情況下,在C代碼時)。