我有一個名為 Data 的類,每當我宣告此類的新實體并更改其中的某些內容時,它都會更改該類的所有實體。我不確定如何解決這個問題,或者它為什么會發生。
(注意,我已經剝離了我的資料類中的很多內容,但是這個示例仍然會產生錯誤)
資料.h
#include <chrono>
volatile class Data{
public:
volatile struct Ts{
volatile int64_t unixTimestamp;
};
int ReturnTimestamp() volatile;
void SetTimestamp(int) volatile;
};
資料.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”?
uj5u.com熱心網友回復:
類中未定義資料,因此您創建了一個全域變數。創建成員變數。
class Data{
public:
struct Ts{
volatile int64_t unixTimestamp;
} data;
int ReturnTimestamp() volatile;
void SetTimestamp(int) volatile;
};
代替volatile Data::Ts data;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470833.html