簡體   English   中英

在此范圍內未聲明g ++

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM