g++未在此范围内声明

g++ was not declared in this scope

本文关键字:范围内 声明 g++      更新时间:2023-10-16

我正在编写带有类的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();
^

数据库.h

#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

database.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: %sn", 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: %sn", 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++的初学者,所以我在这里读到了一些文章,尝试解决方案,但总是得到数据库没有在这个范围内声明。。。有人能给出解决方案吗?

谢谢。

编辑:

我需要调用EZServer()类名,该类名包含OpenDataBaseCreateDataBase等函数。

// Load database that opens save and query
Database = new EZServer();
Database->OpenDatabase("ezserver.db");

所以我需要从EZServer.cpp(主文件程序)调用上面的->OpenDataBase,并从类EZServer返回在数据库.cpp 中定义的函数值

我发现了另一个问题,您应该编译所有*.cpp文件。

g++ ezserver.cpp database.cpp -lsqlite3 -o ezserver

这是我运行以下程序时的日志:

  • g++ezserver.cpp数据库.cpp-lsqlite3-o ezserver数据库.cpp:4:20:错误:隐式声明的"EZServer::EZServer()"的定义™EZServer::EZServer():数据库(0){^DataBase.cpp:10:21:错误:隐式声明的"~EZServer::~EZServer()"的定义™EZServer::~EZServer(){^database.cpp:在成员函数中EZServer::OpenDataBase(const char*)™:database.cpp:20:76:错误:无效™未在此范围内声明int Result=sqlite3_open_v2(TFileName,&数据库,SQLITE_open_READWRITE,NULL)^database.cpp:24:56:错误:"printf"™未在此范围中声明printf("OpenDataBase:%s\n",sqlite3_errmsg(数据库))^database.cpp:在成员函数中的EZServer::CreateDataBase(constchar*)™:database.cpp:34:42:错误:需要主表达式在"~%"之前™token int Result=sqlite3_open_v2(TFileName,%数据库,SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE,NULL)^database.cpp:34:97:错误:"NULL"™未在此范围中声明int结果=sqlite3_open_v2(TFileName,%DataBase,SQLITE_OPEN_READWRITE|SQLITE_oopen_CREATE,NULL)^database.cpp:38:62:错误:"printf"™未在此范围中声明

    printf("OpenDataBaseCreate:%s\n",sqlite3_errmsg(数据库))^

也许你应该写这样的东西:

EZServer* dataBase = new EZServer();
dataBase->OpenDataBase("ezserver.db");