[英]g++ was not declared in this scope
我正在用類編寫sqlite3包裝器以讀取db文件。 我正在使用ubuntu 64位和g ++編譯器...當我在上面運行代碼時,我得到了這個:
g++ ezserver.cpp -lsqlite3 -o ezserver
ezserver.cpp: In function int main():
ezserver.cpp:7:2: error: DataBase was not declared in this scope
DataBase = new EZServer();
^
數據庫
#ifndef DATABASE_H
#define DATABASE_H
/* LIBRARY */
#include <sqlite3.h>
/* CLASS */
class EZServer {
public:
EZServer();
~EZServer();
int OpenDataBase(const char *TFileName);
int CreateDataBase(const char *TFileName);
private:
sqlite3 *DataBase;
sqlite3_stmt *QueryHandle[2];
};
#endif
數據庫.cpp
#include "database.h"
/* CONSTRUCTOR */
EZServer::EZServer(): DataBase(0) {
QueryHandle[0] = NULL;
QueryHandle[1] = NULL;
}
/* DESTRUCTOR */
EZServer::~EZServer() {
/* CLOSE - database */
if (DataBase) {
sqlite3_close(DataBase);
}
}
/* LOAD - database file */
int EZServer::OpenDataBase(const char *TFileName) {
/* OPEN - database */
int Result = sqlite3_open_v2(TFileName, &DataBase, SQLITE_OPEN_READWRITE, NULL);
/* CHECK - database */
if (Result != SQLITE_OK) {
printf("OpenDataBase: %s\n", sqlite3_errmsg(DataBase));
sqlite3_close(DataBase);
return 0;
}
return 1;
}
/* CREATE - database file */
int EZServer::CreateDataBase(const char *TFileName) {
/* OPEN - database */
int Result = sqlite3_open_v2(TFileName, %DataBase, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
/* CHECK - database */
if (Result != SQLITE_OK) {
printf("OpenDataBaseCreate: %s\n", sqlite3_errmsg(DataBase));
sqlite3_close(DataBase);
return 0;
}
return 1;
}
ezserver.h
#ifndef EZSERVER_H
#define EZSERVER_H
/* FORWARD - declarations */
class EZServer;
/* CLASS */
class StatsClass {
public:
int Init();
private:
EZServer *DataBase;
};
#endif
ezserver.cpp
#include "ezserver.h"
#include "database.h"
int main() {
DataBase = new EZServer();
}
主文件是ezserver.cpp。 我是C ++的初學者,所以我在這里閱讀文章,嘗試解決方案,但始終無法在此范圍內聲明DataBase ...有人可以給出解決方案嗎?
謝謝。
編輯:
我需要調用EZServer()類名,該類名包含OpenDataBase CreateDataBase之類的函數。
// Load database that opens save and query
Database = new EZServer();
Database->OpenDatabase("ezserver.db");
所以我需要在上面-> OpenDataBase從EZServer.cpp(主文件程序)中調用,並從EZServer類返回該函數在database.cpp中定義的值
也許您應該這樣寫:
EZServer* dataBase = new EZServer();
dataBase->OpenDataBase("ezserver.db");
我發現了另一個問題,您應該編譯所有* .cpp文件。
g++ ezserver.cpp database.cpp -lsqlite3 -o ezserver
這是我運行此文件時的日志:
g ++ ezserver.cpp database.cpp -lsqlite3 -o ezserver database.cpp:4:20:錯誤:隱式聲明的EZServer :: EZServer()的定義EZServer :: EZServer():DataBase(0) {^ database.cpp:10:21:錯誤:隱式聲明的EZServer ::〜EZServer()的定義EZServer ::〜EZServer(){^ database.cpp:在成員函數int中EZServer :: OpenDataBase(const char *)’:database.cpp:20:76:錯誤:未在此范圍內聲明“ NULL” int結果= sqlite3_open_v2(TFileName,&DataBase,SQLITE_OPEN_READWRITE,NULL); ^ database.cpp:24:56:錯誤:在此范圍內未聲明“ printf” printf(“ OpenDataBase:%s \\ n”,sqlite3_errmsg(DataBase)); ^ database.cpp:在成員函數“ int EZServer :: CreateDataBase(const char *)”中:database.cpp:34:42:錯誤:在“%”令牌int結果之前預期的主表達式= sqlite3_open_v2(TFileName,%DataBase,SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,NULL); ^ database.cpp:34:97:錯誤:未在此范圍內聲明“ NULL” int結果= sqlite3_open_v2(TFileName,%DataBase,SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,NULL); ^ database.cpp:38:62:錯誤:未在此范圍內聲明“ printf”
printf(“ OpenDataBaseCreate:%s \\ n”,sqlite3_errmsg(DataBase)); ^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.