我一直使用:
extern "C"{
#include <editline.h>
}editline.h文件包含以下两行:
extern char *readline();
extern void add_history();在我使用的c++代码中:
char* mbs=readline((char*)"> ");编译器问题:错误:函数'char* readline()‘的参数太多
我理解在C中,将函数声明中的参数列表留空意味着:“一些固定的参数,但未定义”。
代码在过去是有效的,所以应该有一些改变,可能是在editline.h文件中,或者是在g++版本之间。关于g++编译器的正确行为是什么?
发布于 2017-05-03 05:54:13
在extern "C"中包装声明不会将它们转换为C代码。它只会影响名称损坏,允许两种语言之间的链接。
您正在使用的功能在C++中不存在,因此您不能在此处使用它。C++根本看不到匹配的函数。
C标头应该与C++调用者兼容,而不是将整个#include语句包装在extern "C"中并希望得到最好的结果;这类代码通常在标头本身的适当位置具有extern "C",并将避免类似这样的纯C特性。
简而言之,除非你能“修复”头部,否则你就不走运了。
https://stackoverflow.com/questions/43747839
复制相似问题