2013-08-16 40 views
2

我在C++類函數中使用c函數時遇到了一個令人困惑的問題。c和C++頭文件的一些問題

我有一個名爲A的類,它在A.h中定義並在A.cpp中實現。我也有B.hB.c它已宣佈和實施一些功能。

裏面A功能我呼籲它們在B.hB.c定義函數(沒有課B),我認爲這是一個平常的東西,但我得到的編譯器錯誤,說:Unresolved reference或別的東西,它指向的功能B

我在A.cpp的開頭有#include "B.h",我的編譯器是Linux下的GCC(opensuse 12.3),很抱歉,由於版權問題,我無法向您顯示代碼。

這是一個令我困惑的問題,我不是C++專業人士,但我知道C++頭文件和源文件一起工作的方式,所以如果有人對此有類似的經驗,我只是在尋求幫助。

感謝

+0

C++爲由C生成的那些生成不同的符號。因此,需要使用'extern「C'',因爲這會指示'g ++'編譯器爲後面的鏈接創建C-style符號。有關更多信息,請參見[Wiki名爲Mangling的文章](http://en.wikipedia.org/wiki/Name_mangling)。 –

回答

3

你想:

extern "C" { 
    #include "B.h"; 
} 
0

創建一個單獨的頭 - >噓,包括函數()'AC和BC中在它的秒。並將其納入地方要..

有關C標準C頭文件(stdio,stdlib,assert,...)的列表,請在ac前加上併除去.h。例如stdio.h變成cstdio。

For other headers, use 

extern "C" 
{ 
    #include "other_header.h" 
} 
3

您需要編譯BC以及爲包括其功能

gcc -Wall A.cpp B.c -o my_prog 

如果你這樣做,一定要添加後保護到Bh以避免name mangling的C函數

#ifdef __cplusplus 
extern "C" { 
#endif 

/* declare your C functions here */ 

#ifdef __cplusplus 
} 
#endif