src/walletdb.h:96:1:错误:“”令牌之前的预期类名

Posted

技术标签:

【中文标题】src/walletdb.h:96:1:错误:“”令牌之前的预期类名【英文标题】:src/walletdb.h:96:1: error: expected class-name before ‘’ tokensrc/walletdb.h:96:1:错误:“”令牌之前的预期类名 【发布时间】:2018-01-31 00:43:50 【问题描述】:

我正在尝试在 SolydK 系统上编译一个山寨币 QT 钱包。无论我尝试什么,它总是失败

...
g++ -c -pipe -fstack-protector-all --param ssp-buffer-size=1 -D_FORTIFY_SOURCE=2 -O2 -D_REENTRANT -fdiagnostics-show-option -Wall -Wextra -Wno-ignored-qualifiers -Wformat -Wformat-security -Wno-unused-parameter -Wstack-protector -Wno-unused-variable -fpermissive -Wno-unused-local-typedefs -fPIE -DENABLE_WALLET -DBOOST_THREAD_USE_LIB -DBOOST_SPIRIT_THREADSAFE -DQT_DISABLE_DEPRECATED_BEFORE=0 -DBOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT -DUSE_DBUS -DHAVE_BUILD_INFO -DLINUX -DQT_NO_DEBUG -DQT_PRINTSUPPORT_LIB -DQT_WIDGETS_LIB -DQT_DBUS_LIB -DQT_NETWORK_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/lib/i386-linux-gnu/qt5/mkspecs/linux-g++ -Isrc -Isrc/json -Isrc/qt -Isrc/qt/plugins/mrichtexteditor -Isrc/leveldb/include -Isrc/leveldb/helpers -Isrc/secp256k1/include -Idb4/include -isystem /usr/include/i386-linux-gnu/qt5 -isystem /usr/include/i386-linux-gnu/qt5/QtPrintSupport -isystem /usr/include/i386-linux-gnu/qt5/QtWidgets -isystem /usr/include/i386-linux-gnu/qt5/QtDBus -isystem /usr/include/i386-linux-gnu/qt5/QtNetwork -isystem /usr/include/i386-linux-gnu/qt5/QtGui -isystem /usr/include/i386-linux-gnu/qt5/QtCore -Ibuild -Ibuild -o build/bitcoin.o src/qt/bitcoin.cpp
In file included from src/wallet.h:8:0,
                 from src/qt/walletmodel.h:12,
                 from src/qt/bitcoin.cpp:9:
src/walletdb.h:96:1: error: expected class-name before ‘’ token
 
 ^
In file included from src/wallet.h:8:0,
                 from src/qt/walletmodel.h:12,
                 from src/qt/bitcoin.cpp:9:
src/walletdb.h:153:25: error: ‘CDBEnv’ has not been declared
     static bool Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys);
                         ^
src/walletdb.h:154:25: error: ‘CDBEnv’ has not been declared
     static bool Recover(CDBEnv& dbenv, std::string filename);
                         ^
In file included from src/wallet.h:8:0,
                 from src/qt/walletmodel.h:12,
                 from src/qt/bitcoin.cpp:9:
src/walletdb.h: In constructor ‘CWalletDB::CWalletDB(const string&, const char*)’:
src/walletdb.h:98:77: error: class ‘CWalletDB’ does not have any field named ‘CDB’
     CWalletDB(const std::string& strFilename, const char* pszMode = "r+") : CDB(strFilename, pszMode)
                                                                             ^
make: *** [build/bitcoin.o] Error 1

我认为这是一个类继承错误。但是完全相同的源(来自github)在 Mint 17.3(Ubuntu 14.04 LTS)和 Xubuntu 16.04 LTS 系统上编译得很好。有 752 个关于“错误:‘’令牌之前的预期类名”的 SO 问题,但没有一个是针对 bitcoin.cpp 或 walletdb.h。

我不认为这是 Qt 问题;无论在 SolydK 系统上使用 Qt4 还是 Qt5,我都会遇到同样的错误。如果尝试构建守护进程而不是 GUI 钱包,我也会遇到同样的错误(在这种情况下,编译 init.cpp 时会出现错误)。命名 walletdb.h 的违规部分是

...
 94 /** Access to the wallet database (wallet.dat) */
 95 class CWalletDB : public CDB
 96 
 97 public:
 98     CWalletDB(const std::string& strFilename, const char* pszMode = "r+") :     CDB(strFilename, pszMode)
 99     
100     
101 private:
102     CWalletDB(const CWalletDB&);
103     void operator=(const CWalletDB&);
104 public:
105     bool WriteName(const std::string& strAddress, const std::string& strName    );
106 
107     bool EraseName(const std::string& strAddress);
...

我想知道这是否与不同编译器版本的不同默认选项有关。我有薄荷糖

mark gbx $ g++ --version
g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

在 Xubuntu 上是

mark@xubuntu:~/src/EarnzCoin$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

在失败的 SolydK 上

mark@traveller ~/src/EarnzCoin $ g++ --version
g++ (Debian 4.9.2-10) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

但我看不到任何明显的显着差异(例如:--std 的值)使用 g++ --dumpspecs 或在 qmake 生成的 Makefile 中。

大约六种其他山寨币在 SolydK 系统上编译良好。

这不是我的代码,我根本没有改变它,只是想编译它。没有针对 bitcoin.cpp 或 walletdb.h 的这种继承错误的谷歌命中

我不是 C++ 程序员,我不想成为。在我能找到的任何地方都没有其他人报告过这个错误,所以它可能与我的 SolydK 系统有关,但我不知道是什么。

对其他检查/尝试的建议有什么建议吗?

【问题讨论】:

***.com/questions/5319906/… 谢谢,但这对我没有帮助。对我来说,完全相同的代码在另外两台机器上编译,几十台其他人的机器。它无助于识别这台特定机器上的问题,这是我唯一真正关心的机器以及我希望代码在哪里运行。 【参考方案1】:

似乎缺少基类CDB(标头不可用或不包括在内)。检查是否为外部包,必要时安装开发文件。如果没有,则可能有一个 #define 某处使该类在该特定系统上不可用,例如。 G。因为缺少先决条件。

【讨论】:

感谢您为我指明了正确的方向。我不知道怎么做,但事实证明我在 SolydK 机器上的包含路径中有一个错误的 db.h。所以它没有找到基本的 CDB 类。

以上是关于src/walletdb.h:96:1:错误:“”令牌之前的预期类名的主要内容,如果未能解决你的问题,请参考以下文章

如何解决“错误:输入中的语法错误(1)。”

Erlang得到错误** 1:语法错误之前:'->'**

SQLite错误(1):靠近“=”:语法错误

Python - Mysqldb 安装错误 [错误:命令错误退出状态为 1:]

1.10程序设计错误

npm 错误!代码 1.为啥这个错误消息会发生 npm ERR!代码1?我该如何解决