C++ 禁用复制构造函数和赋值运算符时,将引用实例传递给静态方法

C++ 禁用复制构造函数和赋值运算符时,将引用实例传递给静态方法,c++,class,copy-constructor,assignment-operator,C++,Class,Copy Constructor,Assignment Operator,我的ClassA看起来像这样: class ClassA { private: static uint32_t IDCOUNTER; uint32_t _id = -1; public: ClassA(); ~ClassA(); ClassA(const ClassA&) = delete; void operator=(const ClassA&) = delete; }; 我想创建一个ClassA的特定实例,我希望它能够被传

我的ClassA看起来像这样:

class ClassA
{
private:
    static uint32_t IDCOUNTER;
    uint32_t _id = -1;

public:
    ClassA();
    ~ClassA();
    ClassA(const ClassA&) = delete;
    void operator=(const ClassA&) = delete;
};
我想创建一个ClassA的特定实例,我希望它能够被传递,但我不希望它以任何方式被复制。因此,在我的主函数中,我实例化了instanceA1。 接下来,(在我的主函数中),我想将此实例存储在全局的某个位置,比如静态类中:

int main()
{
    ClassA instanceA1;
    ClassStatic::SetClassA(&instanceA1);
}


// this class is declared in a separate file:
class ClassStatic
{
private:
    static ClassA *referenceToA;

public:
    static void SetClassA(ClassA* refToSingleAInstance)
    {
        referenceToA = refToSingleAInstance; // taken from cpp part of the class just for this question
    }
};
编译时,我得到一个链接器错误。为什么呢?我是否把整个概念搞错了(似乎有可能…?)?我该如何解决这个问题

编译时,我得到一个链接器错误。为什么呢

因为您没有定义
ClassStatic::referenceToA

我该如何解决这个问题


在(恰好一个)翻译单元中定义
ClassStatic::referenceToA

您可能想看看“单例模式”及其通常的实现方式……您在哪里定义了IDCOUNTER?而referenceToA?@AliRazmkhah我在ClassA.cpp文件中定义了它。但是我忘了用nullptr或类似的东西初始化referenceToA。我不是用:static ClassA*referenceToA@没有。如果这是定义,那么如果一个定义规则不允许在多个TU中定义变量,那么将类定义包含到多个翻译单元中会有问题。所以我应该在cpp文件中执行ClassStatic::referenceToA=nullptr?抱歉,我是C++新手AudioGuy做了那个工作?我一回到我的电脑就会试试。我会让你随时更新。