【问题标题】:VC++ Generic Singleton Implementation Compiler ErrorVC++ 通用单例实现编译器错误
【发布时间】:2014-08-29 02:08:03
【问题描述】:

所以,假设我有这样的事情:

template <class T>
class SingletonHolder : public T
{
public:
    static SingletonHolder<T>& getInstance()
    {

        static SingletonHolder<T> instance;
        return instance;
    }



private:
    SingletonHolder()
    {
    }


    virtual ~SingletonHolder()
    {
    }


};//class SingletonHolder

并说我有一些虚拟课程:

class SomeClassForCheck
{
public:
    int someF()
    {
        return 5;
    }
};

然后单例的用法:

typedef SingletonHolder< SomeClassForCheck > SomeClassSingleton;

然后当我从 SomeClasse 的 CPP 文件(在任何函数之外)调用此代码时: [背后的想法是基本上使用这个技巧将创建者函数注册到单例工厂类]

//此代码是从匿名命名空间调用的,在 .CPP 文件中 SomeClassSingleton::getInstance().someF();

Visual C++ 报错:

此声明没有存储类或类型说明符

此代码在 GCC 和 C++ Builder 下工作。到目前为止,我还没有在 Visual C++ 中工作过,所以我做错了什么:)?

谢谢! 独山

【问题讨论】:

  • 在 VS 2013 中为我编译。您使用的是哪个版本?
  • 同一个:) WTF? :D
  • 嗯,我刚刚剪切并粘贴了您的帖子,删除了文本并在最后一行周围添加了一个主要功能。也许尝试在一个新项目中这样做,以确保您的 VS 安装没有问题。
  • 实际上,当我尝试将其直接放入 .cpp 文件(在任何函数或任何东西之外的匿名命名空间中)时,它似乎会出现错误。我尝试完成 SingletonFactory::getInstance().registerNew(id,functionCreator) 的事情
  • 如果您只是将该行放在函数之外,则它不是有效代码。它要么需要在函数内部调用(如 main),要么可能作为另一个声明的一部分,如 'int x = SomeClassSingleton::getInstance().someF();'代码本身(在函数之外)看起来像是 getInstance 函数的不完整声明。

标签: c++ templates visual-c++ generics singleton


【解决方案1】:

是的,正如@The Dark 所说,

在函数调用前添加声明:

// 换句话说:bool success = :)

bool 成功 = FileIndexerFactory::getInstance().registerNew(MP3_INDEXER, mp3IndexerCreator);

工作:)

这就是我在凌晨 4:38 从 Coding 得到的 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多