Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 单例子类构造函数错误_C++_C++11_Singleton - Fatal编程技术网

C++ 单例子类构造函数错误

C++ 单例子类构造函数错误,c++,c++11,singleton,C++,C++11,Singleton,我试图将一个单例子类化,但在尝试从派生类构造函数打印时遇到了错误 迈辛格尔顿 #ifndef mysingleton_h #define mysingleton_h #include <iostream> class mysingleton{ public: static mysingleton* singletoninstance; //The one and only one instance static mysingleton* getinstance();

我试图将一个单例子类化,但在尝试从派生类构造函数打印时遇到了错误

迈辛格尔顿

#ifndef mysingleton_h
#define mysingleton_h
#include <iostream>
class mysingleton{
  public:
   static mysingleton* singletoninstance; //The one and only one instance
   static mysingleton* getinstance();
   virtual void dosomething() = 0 ;

 protected:
   mysingleton(const mysingleton&);
   ~mysingleton();

   public:
      mysingleton(){

      }//Prevent clients from creating new singleton

   };



class mysingleton_child:public mysingleton
{
  public:
    virtual void dosomething() {
       std::cout <<"In Child Class \n";
     }
    mysingleton_child()
   {
    //   std::cout <<"In Child Class \n";

   }
~mysingleton_child();
};
主要职能:

#include <iostream>
#include "mysingleton.h"
int main ()
{
   mysingleton *pointer  = mysingleton::getinstance();
   pointer->dosomething();
}
#包括
#包括“mysingleton.h”
int main()
{
mysingleton*指针=mysingleton::getinstance();
指针->剂量测量();
}
当我从mysingleton_子构造函数中取消注释该行时,我得到以下错误


//std::cout在这一行中,您允许每个人直接获取您的singleton实例:

static mysingleton* singletoninstance; //The one and only one instance
所以下一行没有意义:

static mysingleton* getinstance();
但问题是您声明了复制构造函数和析构函数,但没有在.cpp文件中定义它们:

mysingleton(const mysingleton&);
   ~mysingleton();

您还声明了普通构造函数并将其公开。这是个错误。你可以看看《四人帮》这本书来更好地理解单身汉。另外,请阅读有关为什么单身会很糟糕的
StackOverflow
文章。只需谷歌“singleton stack overflow bad”。

既然您在类定义中声明了~mysingleton()和~mysingleton_child(),您应该提供它们的定义。

singleton是一种反模式(只是美化了全局变量)。从长远来看,如果你忘记它们,你会更快乐。不要使用单件-请!和子类化
mysingleton
?这从根本上违背了只有一个
mysingleton
实例的承诺。问题与单例无关。如果您创建了一个@user2357112:那么,您仍然只有一个单例实例,只是每个派生对象只有一个实例:-)为什么?它是一个静态函数,我们试图通过它检索实例?所以不需要函数?你能解释一下为什么单例不需要静态函数吗?你需要一个静态函数来获得单例的一个实例。但是您不需要将指向实例的指针声明为public成员。通常它被宣布为私有。
mysingleton(const mysingleton&);
   ~mysingleton();