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();
^
数据库.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");
- 错误:未在此范围内声明'reverse'
- 错误:"imread"未在此范围内声明
- 未在此范围内声明错误 'xy'
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- "Main"已在当前范围内声明
- c++ 变量在宏的扩展中没有在这个范围内声明
- C++ 在编译过程中 strtok 函数 Eclipse 说没有在范围内声明?
- 'num1'未在此范围内声明
- 如何找到在本地范围内声明的变量的地址?
- NT状态未在此范围内声明
- 变量未在此范围内声明 数组线性搜索
- 包含文件中的 Typdef "未在此范围内声明"
- 'ClassName'和'ClassInstance'未在此范围内声明
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 代码作为 C 文件工作,但不作为C++文件,错误:'__builtin_types_compatible_p'未在此范围内声明
- 如何修复错误:"vreinterpretq_u32_f64"未在此范围内声明 - 在Android上使用Eigen构建
- 如何修复C++中的"arrStud未在此范围内声明"错误
- 错误:"SHGetKnownFolderPath"未在此范围内声明
- 错误:'Sprite'未在此范围内声明