三行代码  ›  专栏  ›  技术社区  ›  Oliver Guy

一个类的所有实例共享相同的值

  •  -1
  • Oliver Guy  · 技术社区  · 1 月前

    我有一个名为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

    为什么不是“13”?

    1 回复  |  直到 1 月前
        1
  •  1
  •   Niteya Shah    1 月前

    类中未定义数据,因此创建一个全局变量。创建一个成员变量。

    class Data{
        public:
            struct Ts{
                volatile int64_t unixTimestamp;
            } data;
    
            int ReturnTimestamp() volatile;
            void SetTimestamp(int) volatile;
    };
    

    而不是 volatile Data::Ts data;