我开始学习如何在c ++中使用sqlite。 我编写了以下函数。现在我想将值返回到我的main函数,但它不起作用,我找不到原因。
当我拿出
return value;
一切都像魅力一样。它打印出我想要的数字,但是当我把它放进去时,编译器会告诉我:
main2.cpp: In Funktion »void query(sqlite3*, const char*, int)«:
main2.cpp:58:12: Fehler: Return-Anweisung mit Wert in »void« zurückgebender Funktion [-fpermissive]
翻译成:
main2.cpp:58:12: Error: Return-Instruction with value in »void« returned function [-fpermissive]
有人有想法吗?
void query(sqlite3* db, const char* sql, int id)
{
int rc;
sqlite3_stmt *stmt;
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (rc != SQLITE_OK)
{
fprintf(stderr, "Can not prepare: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
exit(0);
}
rc = sqlite3_bind_int(stmt, 1, id);
if (rc != SQLITE_OK)
{
fprintf(stderr, "Can not bind: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
exit(0);
}
rc = sqlite3_step(stmt);
if (rc != SQLITE_ROW && rc != SQLITE_DONE)
{
fprintf(stderr, "Can not step: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
exit(0);
}
if (rc == SQLITE_BUSY)
{
fprintf(stderr, "Can not step (busy): %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
exit(0);
}
if (rc == SQLITE_LOCKED)
{
fprintf(stderr, "Can not step (locked): %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
exit(0);
}
if (rc == SQLITE_DONE)
{
sqlite3_finalize(stmt);
printf("not found");
}
// save data
int value = sqlite3_column_int(stmt, 0);
return value;
printf("%i\n", value);
sqlite3_finalize(stmt);
}
非常感谢! ~AMK
答案 0 :(得分:0)
您的函数被定义为具有void
返回类型...这意味着您只能返回void。
如果需要返回值,则需要更改函数的返回类型(可能更改为int
)。
无论你做什么,都要意识到,return
之后的任何陈述绝对不会被执行。
main2.cpp:58:12: Error: Return-Instruction with value in »void« returned function [-fpermissive]
更清晰的英语(因为这显然不够清楚):
您的函数被指定为void
返回。你试图从中返回一些东西,这是一个错误。
什么不明白?