Typedef 不是命名空间的成员

Typedef not a member of namespace

本文关键字:成员 命名空间 Typedef      更新时间:2023-10-16

所以,我正在尝试分叉一些开源代码,在编译时我遇到了这些错误:

C2039 "TransactionId":不是 'CryptoNote' 的成员

C2061 语法错误:标识符"事务 ID">

我对通常将自己限制在C#领域C++相对缺乏经验,但是,我可以清楚地看到TransactionId是在不同的文件中声明的typedef,如下所示:

namespace CryptoNote {
typedef size_t TransactionId;
typedef size_t TransferId;
//more code

抛出错误的行是:

void sendTransactionCompleted(CryptoNote::TransactionId _id, bool _error, const QString& _error_text);

在我没有经验的眼中,看起来TransactionID肯定是Cryptonote的一员,不是吗?

知道发生了什么吗?

回购在这里:https://github.com/hughesjs/Incendium_GUI

必要的子模块在这里:https://github.com/hughesjs/Incendium_Crypt

这些typedefs在Incendium_Crypt/include/IWalletLegacy.h中定义。

void sendTransactionCompleted(CryptoNote::TransactionId _id, bool _error, const QString& _error_text);`

Incendium_GUI/src/gui/SendFrame.h中定义,其中包括IWallet.h。但是,IWallet.h反过来不包括IWalletLegacy.h。因此,这些类型定义对SendFrame.h来说是未知的。

如果不看到所有代码,很难说,但我想到了几件事:

  • 首先,这是您遇到的第一个错误。 C++的编译错误往往会导致一堆次要错误。 例如,以下会导致与您看到的错误类似的错误,但由于尚未定义size_t而无法编译:

    命名空间 CryptoNote {

    typedef size_t TransactionId; typedef size_t TransferId;

    }

    int main(void) { 加密注::交易ID ID; 返回 0; }

    $ g++ -std=c++11 namespace.cxx -o namespace 命名空间.cxx:4:9:错误:"size_t"未命名类型 typedef size_t TransactionId; ^~~~~~ 命名空间.cxx:5:9:错误:"size_t"未命名类型 typedef size_t TransferId; ^~~~~~ namespace.cxx: 在函数 'int main()' 中: namespace.cxx:11:17:错误:"TransactionId"不是"CryptoNote"的成员 加密注::交易ID ID; ^~~~~~~~~~~~~

有关定义size_t的标头列表,请参阅 http://www.cplusplus.com/reference/cstring/size_t/。

  • CryptoNote是否嵌套在另一个命名空间中?
  • 在声明函数的命名空间中是否定义了其他CryptoNote
  • 这些是否在同一个头文件中? 如果不是,定义命名空间的头文件是否包含在包含函数声明的头文件中?