在 c++ 中使用 sqlite 的 void 函数中的"返回"问题

Problems with 'return' in void function with sqlite in c++

本文关键字:函数 返回 问题 void sqlite c++      更新时间:2023-10-16

我刚刚开始学习如何在c++中使用sqlite。我对以下函数进行了编码。现在我想将值返回到我的主函数,但它不起作用,我也不知道为什么。

当我取出时

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: %sn", sqlite3_errmsg(db));
  sqlite3_finalize(stmt);
  exit(0);
  }
  rc = sqlite3_bind_int(stmt, 1, id);
  if (rc != SQLITE_OK) 
  {
  fprintf(stderr, "Can not bind: %sn", sqlite3_errmsg(db));
  sqlite3_finalize(stmt);
  exit(0);
  }
  rc = sqlite3_step(stmt);
  if (rc != SQLITE_ROW && rc != SQLITE_DONE) 
  {
  fprintf(stderr, "Can not step: %sn", sqlite3_errmsg(db));
  sqlite3_finalize(stmt);
  exit(0);
  }
  if (rc == SQLITE_BUSY)
  {
  fprintf(stderr, "Can not step (busy): %sn", sqlite3_errmsg(db));
  sqlite3_finalize(stmt);
  exit(0);
  }
  if (rc == SQLITE_LOCKED)
  {
  fprintf(stderr, "Can not step (locked): %sn", 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("%in", value);
  sqlite3_finalize(stmt);
}

非常感谢!~ AMK

您的函数被定义为具有void返回类型。。。这意味着你只能返回虚空。

如果需要返回值,则需要更改函数的返回类型(可能为int)。

无论你做什么,都要意识到,在return之后,它当前所在的任何语句都绝对不会被执行。


main2.cpp:58:12: Error: Return-Instruction with value in »void« returned function [-fpermissive]

用更清晰的英语(因为这显然不够清晰):

您的函数被指定为返回的void。你试图从中返回一些东西,这是一个错误。

什么是不理解的?