提问人:AudioGuy 提问时间:2/2/2021 更新时间:2/2/2021 访问量:40
禁用 copy-constructor 和 assignment-operator 时将引用实例传递给静态方法
Pass reference instance to static method when copy-constructor and assignment-operator is disabled
问:
我的 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
}
};
编译时,我收到链接器错误。为什么?我是不是弄错了整个概念(似乎很有可能......我该如何解决这个问题?
答:
1赞
eerorika
2/2/2021
#1
编译时,我收到链接器错误。为什么?
因为你没有定义.ClassStatic::referenceToA
我该如何解决这个问题?
在(正好一个)翻译单元中定义。ClassStatic::referenceToA
评论
0赞
AudioGuy
2/2/2021
我不是用静态 ClassA *referenceToA; 来定义它吗??
0赞
eerorika
2/2/2021
@AudioGuy 没有如果这是定义,那么在将类定义包含在多个转换单元中时会遇到问题,因为一个定义规则不允许在多个 TU 中定义变量。
0赞
AudioGuy
2/2/2021
所以我应该在 cpp 文件中做 ClassStatic::referenceToA =nullptr 吗?对不起,我是 c++ 的新手 ;-)
0赞
AudioGuy
2/2/2021
一旦我回到我的电脑,我就会尝试。我会及时通知你。
评论