gpt4 book ai didi

c++ - 所有元素指向同一个对象

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:22 35 4
gpt4 key购买 nike

我正在尝试制作一组​​不同的对象。但是,我注意到每当我更改数组中的一个对象时,所有 元素都会收到该更改。显然,我只希望该索引处的对象接收更改。这是我的代码:

//Creates the array pointer
cacheStats **directMappedTable1024Bytes = new cacheStats *[31];
//Initializes the array with cacheStats objects
for (int i=0; i<31; i++)
{
table[i] = new cacheStats();
}

//Test: Changing element of one object in the array
directMappedTable1024Bytes[5]->setTag(55);
cout << directMappedTable1024Bytes[22]->checkTag(); //should output 0

cacheStats代码:

#include "cacheStats.h"
int tag;
int valid;
using namespace std;
cacheStats :: cacheStats (int t, int v)
{
tag = t;
valid = v;
}
cacheStats :: ~cacheStats()
{
}
void cacheStats :: setTag (int cacheTag)
{
tag = cacheTag;
}
void cacheStats:: setValidBit (int validBit)
{
valid = validBit;
}
int cacheStats :: checkValid()
{
return valid;
}
int cacheStats :: checkTag()
{
return tag;
}

结果cout 输出 55​​,而它本应输出 0。例如,如果我将前面的行更改为 setTag(32),它将输出 32。

有什么想法吗?非常感谢。

最佳答案

问题是 tagvalid 是全局变量,因此由该类的所有实例共享。您需要将它们变成实例变量(即类的非static 数据成员)。

关于c++ - 所有元素指向同一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16267084/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com