src / walletdb.h:96:1:错误:在'{'标记

时间:2018-01-31 00:43:50

标签: c++ linux qt

我正在尝试在SolydK系统上编译altcoin 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.

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

在SolydK系统中,大约有六个其他山寨币正常编译。

这不是我的代码,我根本没有改变它,只是试图编译它。使用bitcoin.cpp或walletdb.h

时,没有针对此继承错误的Google命中

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

有关其他事项要检查/尝试的建议吗?

1 个答案:

答案 0 :(得分:0)

似乎缺少基类CDB(标题不可用或未包括在内)。检查它是否是外部包,并在必要时安装开发文件。如果不是,那么某个地方可能会有#define使该类在该特定系统上不可用,例如: G。因为缺少先决条件。