【问题标题】:C++ Can't access public variable between classesC ++无法访问类之间的公共变量
【发布时间】:2023-03-27 21:46:01
【问题描述】:

我一直在拼命地尝试在 C++ 中的两个类之间共享一个公共变量,但我似乎无法掌握它。我已经尝试过 getter 和 setter,并直接将其作为静态变量调用,但没有。

这是我尝试过的:

DataGrabber.h

#pragma once

class DataGrabber {
    public:
        static float temp;

        void readProcess(){
            temp = 1.2;
        }
 }

粒子.h

#pragma once

class Particle {
     public:
           void update() {
                float x = DataGrabber::temp; 
           }

然后这个:

DataGrabber.h

#pragma once

class DataGrabber {
    public:
        float temp;

        float get(){return temp;}

        void readProcess(){
            temp = 1.2;
        }
 }

粒子.h

#pragma once

class Particle {
     public:
           void update() {
                float x = DataGrabber.get(); 
           }

它们都在另一个主标头 testApp.h 中被 #include。

【问题讨论】:

  • 不知道你在问什么。
  • DataGrabber 是一个 type 并且不能像在第二个示例中那样使用。如果您想在没有DataGrabber 实例的情况下调用它,则成员(即get)需要为static 并且您需要提供一个合格的名称,例如DataGrabber::get 或@987654330 @,
  • 第一个示例看起来可能有效。你得到什么错误信息?您是否包含来自 Particle.h 的 DataGrabber.h?
  • 你想抓取哪个DataGrabber的数据? (通过使它成为一个类,如果它不是静态的,那么你说的可能不止一个!)

标签: c++ global-variables public getter


【解决方案1】:

具体的问题是什么?你如何使用这些类?

无论如何,您的 getter 代码存在几个问题。

首先,如果你将变量设为 public,为什么还要使用 getter?如果您打算采用这种设计,则应将变量隐藏为私有,以防止直接修改。

其次,如果它是一个简单的成员变量,你应该通过传递给你的函数的对象来访问它:

void update(DataGrabber& grabber) {
    float x = grabber.get();
}

在这种情况下,你必须在你的主代码中创建这个对象,你没有显示。

如果您想改用静态变量,请查看 Singleton 模式,但我建议您不要使用它,除非您的确切问题没有更好的选择。

最后,您应该在头文件中#include 所有直接依赖项。您的 Particle 依赖于 DataGrabber,因此您应该在 Particle.h 中包含它的标头。或者,至少,您应该添加一个前向声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2013-06-22
    • 2013-02-01
    相关资源
    最近更新 更多