Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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++_Printing_Singleton_Operator Overloading - Fatal编程技术网

C++ 无法重载运算符<&书信电报;因为单身

C++ 无法重载运算符<&书信电报;因为单身,c++,printing,singleton,operator-overloading,C++,Printing,Singleton,Operator Overloading,我按照本教程创建了我的singleton(我的类名为King):; 这是我的代码: 国王h: #include "Generic_Piece.h" class King : public Generic_Piece { public: //public static accessor function static King *instance(); protected: //singleton : define all constructors to be

我按照本教程创建了我的singleton(我的类名为King):; 这是我的代码:

国王h:

#include "Generic_Piece.h"

class King : public Generic_Piece {
public:
     //public static accessor function
     static King *instance();


 protected:
     //singleton : define all constructors to be protected
     King(){}

 private:
     static King *k;

 };

//Print the king in green colour
namespace std{
    ostream& operator<<(ostream& out, const King& k);
}
#包括“Generic_Piece.h”
类王:公共通用_件{
公众:
//公共静态存取函数
静态King*实例();
受保护的:
//singleton:定义要保护的所有构造函数
国王{}
私人:
静态King*k;
};
//把国王印成绿色
名称空间标准{

ostream&operator
King::instance
返回指针。因此,当您编写

std::cout << King::instance() << std::endl;
更好的是,让
King::instance()
返回对
King
的引用:

King& King::instance(){
    if(!k){
        k = new King();
        //the king is green
        k->setTeam(0);
    }
    return *k;
}

现在,对
操作符
King::instance
的原始调用返回一个指针,如果要打印对象,应该取消对该指针的引用(实际上这与singleton无关)单身是一种反模式的行为,大多数只是美化了全局变量。可能会给你带来很多悲伤和痛苦。我的建议是避免单身。我不敢相信这是如此明显。我太关注代码的另一部分了,所以我很恐慌。谢谢你的回答+改进。
std::cout << King::instance() << std::endl;
std::cout << *King::instance() << std::endl;
King& King::instance(){
    if(!k){
        k = new King();
        //the king is green
        k->setTeam(0);
    }
    return *k;
}