class 的所有实例共享相同的值
All instances of a class share the same values
我有一个名为 Data 的 class,每当我声明此 class 的新实例并更改其中的某些内容时,它都会更改 class 的所有实例。我不确定如何解决这个问题,或者它为什么会发生。
(请注意,我已经剥离了我的数据 class 中的很多内容,但这个示例仍然会产生错误)
Data.h
#include <chrono>
volatile class Data{
public:
volatile struct Ts{
volatile int64_t unixTimestamp;
};
int ReturnTimestamp() volatile;
void SetTimestamp(int) volatile;
};
Data.cpp
#include "data.h"
#include <ctime>
volatile Data::Ts data;
int Data::ReturnTimestamp() volatile{
return data.unixTimestamp;
}
void Data::SetTimestamp(int timestamp) volatile{
data.unixTimestamp = timestamp;
}
在主要我运行
int main() {
Data d1;
Data d2;
Data d3;
d1.SetTimestamp(1);
d2.SetTimestamp(2);
d3.SetTimestamp(3);
printf("%i %i %i\n", d1.ReturnTimestamp(), d2.ReturnTimestamp(), d3.ReturnTimestamp());
return 0;
}
输出为
3 3 3
我希望输出为
1 2 3
为什么不是“1 2 3”?
数据没有在class中定义,所以你创建了一个全局变量。创建成员变量。
class Data{
public:
struct Ts{
volatile int64_t unixTimestamp;
} data;
int ReturnTimestamp() volatile;
void SetTimestamp(int) volatile;
};
而不是volatile Data::Ts data;
我有一个名为 Data 的 class,每当我声明此 class 的新实例并更改其中的某些内容时,它都会更改 class 的所有实例。我不确定如何解决这个问题,或者它为什么会发生。
(请注意,我已经剥离了我的数据 class 中的很多内容,但这个示例仍然会产生错误)
Data.h
#include <chrono>
volatile class Data{
public:
volatile struct Ts{
volatile int64_t unixTimestamp;
};
int ReturnTimestamp() volatile;
void SetTimestamp(int) volatile;
};
Data.cpp
#include "data.h"
#include <ctime>
volatile Data::Ts data;
int Data::ReturnTimestamp() volatile{
return data.unixTimestamp;
}
void Data::SetTimestamp(int timestamp) volatile{
data.unixTimestamp = timestamp;
}
在主要我运行
int main() {
Data d1;
Data d2;
Data d3;
d1.SetTimestamp(1);
d2.SetTimestamp(2);
d3.SetTimestamp(3);
printf("%i %i %i\n", d1.ReturnTimestamp(), d2.ReturnTimestamp(), d3.ReturnTimestamp());
return 0;
}
输出为
3 3 3
我希望输出为
1 2 3
为什么不是“1 2 3”?
数据没有在class中定义,所以你创建了一个全局变量。创建成员变量。
class Data{
public:
struct Ts{
volatile int64_t unixTimestamp;
} data;
int ReturnTimestamp() volatile;
void SetTimestamp(int) volatile;
};
而不是volatile Data::Ts data;