在同一项目的 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++ 类方法的主要内容,如果未能解决你的问题,请参考以下文章

子类可以直接调用父类的函数吗

C++调用同一个虚函数的超类函数

在 C++ 中从同一类中的另一个方法调用方法

[ C++ ] 抽象类 虚函数 虚函数表 -- C++多态

模板化成员函数不能从同一个类调用非模板化成员函数,C++

C#调用C++ DLL类方法