所以,我试图分发一些开源代码,在编译时我遇到了这些错误:
C2039' TransactionId':不是CryptoNote'
的成员C2061语法错误:标识符' TransactionId'
我<button>Stop</button>
相对缺乏经验,通常只限于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
的成员,不是吗?
任何想法会发生什么?
答案 0 :(得分:1)
这些typedef在MIN
中定义。
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
不知道那些typedef。
答案 1 :(得分:0)
如果没有看到所有代码,很难说,但有些事情会浮现在脑海中:
首先这是你得到的第一个错误。使用C ++编译错误往往会导致一堆次要错误。例如,下面的结果与您看到的类似,但由于未size_t
未定义而无法编译:
名称空间CryptoNote {
typedef size_t TransactionId; typedef size_t TransferId;
}
int main(void) { CryptoNote :: TransactionId id; 返回0; }
$ g ++ -std = c ++ 11 namespace.cxx -o namespace 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
?