在同一项目的 C 函数中调用 C++ 类方法
Posted
技术标签:
【中文标题】在同一项目的 C 函数中调用 C++ 类方法【英文标题】:Call C++ class method in a C function on same project 【发布时间】:2013-08-01 14:20:20 【问题描述】:我有一个 Qt Gui 项目,它使用 C 和 C++ 形成混合语言。我必须在我的 C 源代码中使用 C++ 类函数。怎么称呼它?你能帮我吗?
要调用的 C++ 函数
void MainWindow::putsDisplay(int Line, char *string)
if(Line == 0)
ui->customerLine_1->setPlainText(string);
if(Line == 1)
ui->customerLine_2->setPlainText(string);
if(Line == 2)
ui->cashierLine_1->setPlainText(string);
if(Line == 3)
ui->cashierLine_2->setPlainText(string);
if(Line == 4)
ui->printerArea->setPlainText(string);
【问题讨论】:
简答:你不能。 【参考方案1】:您不能直接使用 C++ 方法,您必须创建一个函数才能调用对象的方法。这是一个示例(C++ 文件的一部分):
extern C
void example(int Line, char *string)
static MainWindow win;
win.putsDisplay(Line, string);
C 代码:
int main()
example(42, "it is an example");
return 0;
extern C
将禁用名称修改,因此可以从 C 代码中调用 example()
。您可以保留static MainWindow win;
,或将其设为全局或其他,但您需要一个MainWindow
对象。
【讨论】:
我已经在 MainWindow obj 中有一个实例。所以不需要新实例,当我调用main.c中的函数时,我需要指定这个实例,比如那个包装器或...... 您可以使用我的解决方案(实际上是一个包装器),您只需从example()
访问您的实例。【参考方案2】:
请记住,C 是 C++ 的子集。
您可以将具有 C 代码的文件命名为 x.C 或 x.cpp,然后使用 c++ 编译器将其与其余文件一起编译。然后就可以从 C 代码中调用 C++ 方法了。
【讨论】:
我更喜欢说:C++ 是 C 的超集... :(以上是关于在同一项目的 C 函数中调用 C++ 类方法的主要内容,如果未能解决你的问题,请参考以下文章