首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模板类:没有适当的默认构造函数可以获得。但是我的一些类不能有默认的构造函数。

模板类:没有适当的默认构造函数可以获得。但是我的一些类不能有默认的构造函数。
EN

Stack Overflow用户
提问于 2011-11-08 08:17:17
回答 3查看 1K关注 0票数 1

我遇到了一个奇怪的问题,在这个问题中,我需要一个默认的构造函数才能让我的模板类工作,但是我想在模板中使用的一些类不能有默认的构造函数。

我的意思是,某些类不能有默认构造函数,因为它们有一个const引用字段,因此必须在构造函数/初始化列表中设置它们。如果我有一个默认的构造函数,就没有什么可以设置这些引用。

因此,我想对此有两种可能的解决方案:有时在模板类中找到允许非默认构造函数的方法,或者找到在默认构造函数中设置const引用字段的方法。

我该怎么解决这个问题?

这里是我的模板代码:

代码语言:javascript
运行
复制
#pragma once

template<class T>
class Singleton
{
public:
    static T* getInstance()
    {
        if(!instance) instance = new T;
        return instance;
    }
static void setInstance(T* inst)
{
    instance = inst;
}
protected:
    Singleton();
    ~Singleton();
private:
    Singleton(Singleton const&);
    Singleton& operator=(Singleton const&);
    static T* instance;
};

template<class T> T* Singleton<T>::instance = 0;

这里是我设置const引用的地方(在.cpp中):

代码语言:javascript
运行
复制
InputHandler::InputHandler(const sf::Input& inputObject)
    : input(inputObject)
{

和输入在标头中定义:

代码语言:javascript
运行
复制
const sf::Input& input;

我必须使用常量引用,因为这个代码区域(在不同的文件中):

代码语言:javascript
运行
复制
const sf::Input& input = window.GetInput();
InputHandler* inputHandler = new InputHandler(input);
Singleton<InputHandler>::setInstance(inputHandler);

GetInput()不是我的方法之一,它必须返回一个const::Input&

EN

Stack Overflow用户

发布于 2011-11-08 08:48:03

如果您有一个引用成员,那么您就不能(明智地)使您的类默认为可构造的或可分配的,因为必须初始化引用,并且不能重新分配。

如果您需要类中的这些属性,那么您可能希望成员是一个指针,默认情况下初始化为null,并在需要时稍后分配。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8047602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档