[英]Calling C++ member function from C
以下是我的C ++代碼:
#include<iostream>
#include<string.h>
extern "C" void wrapper(struct NB*, int );
struct AssetDbFilter {
std::string attribute;
std::string value;
};
class NB {
public:
void myTest(int a);
};
以下是C ++代碼:
#include<iostream>
#include<string.h>
#include "test.h"
using namespace std;
void NB :: myTest (int a) {
cout << a;
}
void wrapper(NB* nb, int a) {
nb->myTest(a);
}
以下是我的C代碼:
#include<stdio.h>
#include "test.h"
void wrapper(struct NB* ,int );
int main()
{
AssetDbFilter* assetdb;
struct NB* nb;
wrapper(nb, 5);
}
我無法執行此代碼。 我正在從C代碼調用C ++成員函數。 當我以g++ test.c
執行此C文件時,出現以下錯誤:
/tmp/ccr1IaLa.o: In function `main':
test1.c:(.text+0x15): undefined reference to `wrapper'
collect2: error: ld returned 1 exit status
誰能告訴我該如何解決?
您構建了test.c
,太好了! 現在,您還需要構建C ++文件,以便提供定義。
當前,您的工具鏈認為您想將 test.c
編譯並鏈接到應用程序中,但是test.c
並不是您的全部源代碼。
您無需鏈接即可編譯test.c
:
gcc test.c -c
然后對您的C ++文件執行相同的操作:
g++ whatever.cpp -c
然后將它們鏈接在一起以獲得可執行文件:
g++ test.o whatever.o -o myProgram
不幸的是,由於您正在懸空/未初始化的指針上調用成員函數,因此程序仍然無法運行。 由於您無法從C代碼中實例化NB
,因此該方法無效。
我建議NB
僅包含C兼容成員。 然后,您可以將其定義放入共享頭文件中,並在任何需要的地方實例化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.