我想在我的C ++项目中使用这个C代码: mysql.c:
/* Simple C program that connects to MySQL Database server*/
#include <mysql.h>
#include <stdio.h>
#include <string.h>
main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server = "localhost";
char *user = "root";
char *password = "rebourne"; /* set me first */
char *database = "mydb";
conn = mysql_init(NULL);
/* Connect to database */
if (!mysql_real_connect(conn, server,
user, password, database, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
/* send SQL query */
if (mysql_query(conn, "show tables")) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
res = mysql_use_result(conn);
/* output table name */
printf("MySQL Tables in mysql database:\n");
while ((row = mysql_fetch_row(res)) != NULL)
printf("%s \n", row[0]);
/* close connection */
mysql_free_result(res);
mysql_close(conn);
}
用gcc编译:
gcc -o output-file $(mysql_config --cflags) mysql.c $(mysql_config --libs)
但不是用g ++ ..
你会做什么?
编辑: 错误是: 出口(1);未在此范围内声明
答案 0 :(得分:4)
首先要做的事情:如果你向我们展示了编译错误,它可能会更有帮助。
话虽这么说,我最初的本能是建议:
extern "C"
{
#include <mysql.h>
#include <stdio.h>
#include <string.h>
}
现在这是一个猜测,但如果没有实际的错误信息,那么这是你最好的。
哦,也许重命名文件以.cpp,.c ++或.C(大写)结尾会有所帮助。
答案 1 :(得分:1)
使用:
extern "C"
{
YOUR CODE HERE
}
答案 2 :(得分:1)
好的,既然给出了答案,那么可以学习一些课程。
首先,在报告无法编译的内容时始终提供错误。这些消息包含有价值的信息也不要解释他们。将它们剪切并粘贴到自己的代码块中。
其次,只要您使用某个功能,检查文档。我从未见过没有告诉你手册页顶部或等效文件所需的头文件的C文档。它与解释函数的作用一样,也是文档的一部分。编程C和C ++时需要大量的头文件。记录函数所需的标题是一个非常常见的文档习惯用语。
答案 3 :(得分:0)
#include <stdlib.h>
虽然我怀疑它确实说过“退出(1);”。请在下次显示确切的消息。
答案 4 :(得分:0)
现在,我没有在很长一段时间内编程C(并且从未处于非常高的水平)但是我觉得奇怪的是你想要在现有的代码库中包含main()函数。难道真的是编译器或链接器在抱怨吗?当你说GCC成功编译代码时,你只是编译那个源文件,还是将它包含在更大的代码库中?
如果我的猜测是正确的,那么将函数重命名为main之外的其他内容是有意义的,例如connect_to_database()。