簡體   English   中英

從C調用C ++成員函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM