C ++:对Singleton类中的实例的未定义​​引用 [英] C++: Undefined reference to instance in Singleton class

查看:81
本文介绍了C ++:对Singleton类中的实例的未定义​​引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在尝试将工厂作为一个单一工厂来实施.我实际上使用了Singleton模式的教科书示例.这是.h文件:

I'm currently trying to implement a factory as a singleton. I practically used the textbook example of the Singleton pattern. Here's the .h file:

namespace oxygen{

class ImpFactory{

public:
    static boost::shared_ptr<ImpFactory> GetInstance();

private:
    static boost::shared_ptr<ImpFactory> mInstance;
};

这是.cpp文件:

#include "impfactory.h"

using namespace oxygen;
using namespace boost;

shared_ptr<ImpFactory> ImpFactory::GetInstance(){
    if (mInstance.get() == 0)
        mInstance = shared_ptr<ImpFactory>(new ImpFactory());
    return mInstance;
}

代码可以编译,但是出现链接器错误:

The code compiles, but I get a linker error:

../../lib/oxygen/liboxygen.so.3.2.4:未定义对`oxygen :: ImpFactory :: mInstance'的引用

../../lib/oxygen/liboxygen.so.3.2.4: undefined reference to `oxygen::ImpFactory::mInstance'

目前有3名学生受难.有什么想法吗?

This currently has three students stumped. Any ideas?

推荐答案

您必须定义静态实例,而不仅仅是声明它.该定义将创建您引用的实际对象.

You must define the static instance, not just declare it. The definition creates the actual object you refer to.

在您的cpp文件中,添加以下行:

In your cpp file, add the line:

boost::shared_ptr<ImpFactory> ImpFactory::mInstance;

这篇关于C ++:对Singleton类中的实例的未定义​​引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆