SQLite函数调用都具有无效参数

时间:2014-12-12 14:47:21

标签: c++ eclipse sqlite invalid-argument

我试图将SQLite Amalgamation添加到我的项目中。根据{{​​3}},我"只需将合并复制到您的源目录中,然后将其与项目中的其他C代码文件一起编译。"我也在sqlite3.h中复制了所以我可以访问API。

但是,任何函数调用API,例如:

sqlite3 *db;
int rc;

rc = sqlite3_open("test.db", &db);

导致以下错误:

  

无效的参数'
  候选人是:
  int sqlite3_open(const char *,* *)'

     

DataSettings.cpp
  / FCS / SRC
  第24行   语义错误

我在这里做错了什么?我忽略了什么?

1 个答案:

答案 0 :(得分:2)

这个问题有一个名称错位的标志。因为C ++允许函数根据其参数类型进行重载,所以C ++编译器必须将它们发出的函数名称“破坏”到目标代码中以编码参数类型。 C编译器没有这样做,并且不希望它对它们完成。向C ++编译器指定函数具有“C”链接会禁用名称重写和该函数名称的重载;这是extern "C"的作用。

虽然C在许多方面类似于C ++的子集,但两者是不同的语言。最好用C编译器编译C代码。因此,您的另一个选择是将sqlite合并的C源与C ++代码分开构建到库中,并将其与C ++目标文件链接以生成最终的可执行文件。