【问题标题】:Typedef not a member of namespaceTypedef 不是命名空间的成员
【发布时间】:2018-03-18 14:30:22
【问题描述】:

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

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

C2061 语法错误:标识符“TransactionId”

我对@9​​87654324@ 通常将自己限制在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 的成员,不是吗?

有什么想法吗?

repo 在这里:https://github.com/hughesjs/Incendium_GUI

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

【问题讨论】:

  • 从使用位置看typedef是否可见?
  • 这可能是一个可见性问题,因为我不能reproduce the error
  • 另外,为什么用cmakemsbuild标记?
  • CryptoNote 是否嵌套在另一个命名空间下?

标签: c++ namespaces typedef


【解决方案1】:

这些类型定义在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 不知道这些 typedef。

【讨论】:

  • 嗯,对,将 typedef 添加到 SendFrame.h 让它编译,现在链接器存在一些问题,但这是另一个问题。谢谢!
【解决方案2】:

没有看到所有代码很难说,但有几件事浮现在脑海:

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

    命名空间 CryptoNote {

    typedef size_t TransactionId; typedef size_t TransferId;

    }

    int main(void) { CryptoNote::TransactionId id; 返回0; }

    $ g++ -std=c++11 命名空间.cxx -o 命名空间 namespace.cxx:4:9: 错误:‘size_t’没有命名类型 typedef size_t TransactionId; ^~~~~~ namespace.cxx:5:9: 错误:‘size_t’没有命名类型 typedef size_t TransferId; ^~~~~~ namespace.cxx:在函数“int main()”中: namespace.cxx:11:17:错误:“TransactionId”不是“CryptoNote”的成员 CryptoNote::TransactionId id; ^~~~~~~~~~~~~~~~

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多