gpt4 book ai didi

c++ - 从 C++ 调用 C 方法

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:25 25 4
gpt4 key购买 nike

我知道有很多与此相关的 SO 问题,但我遇到的问题都没有解决我的问题。就这样吧。

我有一个 C++ 文件和方法:

MyClass.cpp

extern "C" {
#include "C_methods.h"
}

void MyClass::run_c_method_1()
{
std::string filename_1 = <from somewhere else>;
std::string filename_2 = <from somewhere else>;
c_method_1(filename_1.c_str(), filename_2.c_str());
}

C_methods.h

#ifndef Project_C_methods_h
#define Project_C_methods_h

int c_method_1(char* filename1, char* filename_2);

#endif

C_methods.c

#include "C_methods.h"

int c_method_1(char* filename1, char* filename_2) {
/* Do some stuff */
return 0;
}

我正在 Xcode 中的 OSX 上构建/运行它,编译器告诉我:

没有对“c_method_1”的匹配函数调用

对我来说,这毫无意义。从其他 SO 答案来看,看起来 extern 我已经包装了 header #include "C_methods.h" 应该告诉编译器这些函数存在,并且在 C 中编译。

有谁知道我哪里会出错?我很难过。

最佳答案

你的问题实际上可以简化为:

#include <string>

void foo(char *);

int main() {
std::string s;
foo(s.c_str());
}

函数接受 char * ,而是一个 const char *传递给它。如果函数不修改指针对象,它应该采用 const char *。 .否则,您将不得不使用可修改的缓冲区。从 C++11 开始,std::string&s[0]计数为 1,直到最后的内部空字符之前。在那之前,你最好使用 std::vector<char> .

关于c++ - 从 C++ 调用 C 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com