我有这个错误。 我的标题:
libtorrent::fingerprint a("LT", LIBTORRENT_VERSION_MAJOR, LIBTORRENT_VERSION_MINOR, 0, 0);
class TorrentClass
{
}
编译器抱怨libtorrent :: fingerprint已在另一个类中定义,因为它已被包含在内。所以我把它移到我的班级里面
class TorrentClass
{
private:
libtorrent::fingerprint a("LT", LIBTORRENT_VERSION_MAJOR, LIBTORRENT_VERSION_MINOR, 0, 0);
}
然后我的编译器在移动的行上得到了非常奇怪的错误,比如
error C2059: syntax error : 'string'
我做错了什么?
答案 0 :(得分:2)
你不能用C ++做到这一点。
如果你想要一个名为libtorrent::fingerprint
的{{1}}实例(可怕名称),那么你需要将它声明为该类的属性并在构造函数中初始化它。这是一个例子:
a
class TorrentClass { public: TorrentClass() :a("LT", LIBTORRENT_VERSION_MAJOR, LIBTORRENT_VERSION_MINOR, 0, 0) { } private: libtorrent::fingerprint a };
这与您发布的代码无关。
答案 1 :(得分:1)
在你的.h文件中。声明:
#ifndef CLASS_TORRENT_H
#define CLASS_TORRENT_H
#include "libtorrent.h" // I'm guessing this is the header file that declares the "fingerprint" class
extern libtorrent::fingerprint a;
class TorrentClass
{
public:
TorrentClass();
// your class declaration goes here
};
#endif
在.cpp(.cc)文件中。定义对象:
#include "ClassTorrent.h" // the header file described above
libtorrent::fingerprint a("LT", LIBTORRENT_VERSION_MAJOR, LIBTORRENT_VERSION_MINOR, 0, 0);
TorrentClass::TorrentClass()
{
// your constructor code goes here.
}
此外,在我的团队中,我们明确禁止“全局对象”,例如您声明的“a”实例。原因是构造函数在“main”之前运行(与所有其他全局对象以非确定性顺序运行)。并且它的析构函数在主要退出之后才会运行。
如果你确实需要“a”为全局,请将其实例化为指针并用new分配:
libtorrent::fingerprint *g_pFingerPrintA;
int main()
{
g_pFingerPrintA = new libtorrent::fingerprint("LT", LIBTORRENT_VERSION_MAJOR, LIBTORRENT_VERSION_MINOR, 0, 0);
// program code goes here
// shutdown
delete g_pFingerPrintA;
}