C++ 初始化。复制构造函数为私有时的静态成员

C++ 初始化。复制构造函数为私有时的静态成员,c++,reference,copy-constructor,static-members,C++,Reference,Copy Constructor,Static Members,我有一个类X,我的目标是有一个表示“坏对象”的特殊变量,以便实现一个返回X& 例如: //X.h class X{ private: int i; X(const X& other){} //private COPY CTOR public: const static X& badObject; X(int a) : i(a) {} // the only CTOR const X& f(){ if(true) //return s

我有一个类X,我的目标是有一个表示“坏对象”的特殊变量,以便实现一个返回
X&

例如:

//X.h
class X{
private:
  int i;
  X(const X& other){} //private COPY CTOR

public:
  const static X& badObject;

  X(int a) : i(a) {} // the only CTOR

  const X& f(){
   if(true)
    //return some valid X object
   else
      return badObject;
};
唯一的CTOR不是默认的CTOR,复制CTOR是私有的(我不想允许处理此对象)。
Operator=
也是私有的。
现在,当我尝试初始化时。X.cpp中的badObject出现错误:

//X.cpp
#include "X.h"
const X& X::badObject = X(1);
因为拷贝是私有的

我做错了什么?我应该如何解决此问题?

谢谢

将声明更改为

const static X badObject

以及

constx::badObject(1)


这将只创建一个
badObject
实例。由于函数通过ref返回其值,因此不需要复制构造函数或其他任何东西。

将声明更改为

const static X badObject

以及

constx::badObject(1)


这将只创建一个
badObject
实例。由于您的函数通过ref返回其值,因此不需要复制构造函数或其他任何东西。

为什么
badObject
是一个引用(指向什么)?请在声明中尝试“const static X badObject;”并在定义中尝试“const X X::badObject(1)”。它是一个引用,因为如果不是,每次我都会执行“return badobObject”,将调用一个CTOR来创建一个临时对象,由f()的值返回,我不想这样做。不,这不是它的工作方式-您只需要函数返回一个ref,每次它返回时都会返回同一个对象的ref。但我就是这么做的。。不是吗?f()返回一个引用。。。但我会试试看。这似乎是正确的。为什么
badObject
是一个引用(指向什么)?在声明中尝试“const static X badObject;”,在定义中尝试“const X::badObject(1)”。它是一个引用,因为如果不是,每次我执行“return badObject”时,都会调用一个CTOR来创建一个临时对象,由f()的值返回我不想这样做。不,这不是它的工作原理-你只需要函数返回一个ref,每次它返回时,它都会返回同一个对象的ref。但我就是这么做的。。不是吗?f()返回一个引用。。。但我会试试看。这似乎是对的。