将类定义为返回引用的函数

时间:2014-08-18 14:46:44

标签: c++

我正在尝试从我实验室中的另一个人编译一些旧的源代码。 我无法真正理解以下技巧的想法。为什么有人想通过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()'

1 个答案:

答案 0 :(得分:2)

您的代码缺少原始代码:成员(由init()方法返回的类型)由此initialization list初始化,类似于:< / p>

class CLog2
{
public:
    CLog2() : x(gLogFactory().init())
        { }

    int x;
};