我正在尝试从我实验室中的另一个人编译一些旧的源代码。 我无法真正理解以下技巧的想法。为什么有人想通过gLogFactory()给出的引用来访问CLog2Factory类?我怎样才能成功编译和链接下面的代码?
整个代码很大,所以我做了一个简短的例子。保持原始代码中的朋友和虚拟。
test.h:
class CLog2;
class CLog2Factory
{
friend class CLog2;
public:
CLog2Factory() {}
virtual int init() = 0;
};
CLog2Factory& gLogFactory();
class CLog2
{
public:
CLog2() : gLogFactory().init()
{ }
};
TEST.CPP:
#include "test.h"
int main(int argc, char *argv[])
{
CLog2 log;
return 0;
}
我收到以下错误:
test.h: In constructor ‘CLog2::CLog2()’: test.h:50:15: error: class ‘CLog2’ does not have any field named ‘gLogFactory’
CLog2() : gLogFactory().init()
^
test.h:50:28: error: expected ‘{’ before ‘.’ token
CLog2() : gLogFactory().init()
事实上,我可以编译原始代码(也许我在测试示例中遗漏了一些东西)。但无法联系它。链接原始代码的错误如下(文件test.h现在改为Log2.h):
Log2.h:254: undefined reference to `gLogFactory()'
答案 0 :(得分:2)
您的代码缺少原始代码:成员(由init()
方法返回的类型)由此initialization list初始化,类似于:< / p>
class CLog2
{
public:
CLog2() : x(gLogFactory().init())
{ }
int x;
};