在c ++中使用sqlite在void函数中'return'的问题

时间:2013-12-07 22:36:37

标签: c++ sqlite

我开始学习如何在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

1 个答案:

答案 0 :(得分:0)

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

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

无论你做什么,都要意识到,return之后的任何陈述绝对不会被执行。


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

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

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

什么不明白?