将对象传递到另一个类c ++中的函数

jw1*_*294 0 c++

我正在学习c ++中的类和对象,并尝试使用以下代码来测试我是否理解它:

#include <iostream>

using namespace std;

class class1
{
    public:
        void write(int x)
        {
             dataObject.var = x;
        }
};

class class2
{
    public:
        void read()
        {
            std::cout << dataObject.var;
        }
};

class data
{
    public:
        int var;
        data()
        {
            var = 1;
        }
};

int main()
{
    data dataObject;
    class1 object1;
    class2 object2;


    object2.read(data dataObject);
    object1.write(2);
    object2.read(data dataObject);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是两个对象都用于修改和使用第三个成员,但我得到以下错误:

In member function 'void class1::write(int)':
line 10: error: 'dataObject' was not declared in this scope

In member function 'void class2::read()':
line 14: error: 'dataObject' was not declared in this scope

In function 'int main()':
line 40 + 42: error: expected primary-expression before 'dataObject'
Run Code Online (Sandbox Code Playgroud)

知道我哪里错了吗?提前致谢.

编辑:感谢您的所有建议.我现在的代码是:

#include <iostream>

using namespace std;

class class1
{
    public:
        void write(data &dataObject, int x)
        {
            dataObject.var = x;
        }

};

class class2
{
    public:
        void read(data dataObject)
        {
            std::cout << dataObject.var << endl;
        }
};

class data
{
    public:
        int var;
        data()
        {
            var = 1;
        }
};

int main()
{
    data dataObject;
    class1 object1;
    class2 object2;


    object2.read(dataObject);
    object1.write(dataObject,2);
    object2.read(dataObject);

    return 0;
}    
Run Code Online (Sandbox Code Playgroud)

我现在得到错误:

8错误:'data'尚未声明

10错误:请求'dataObject'中的成员'var',它是非类型'int'

18错误:'data'尚未声明

20错误:请求'dataObject'中的成员'var',它是非类型'int'

40错误:在此范围内未声明'dataObject'

jua*_*nza 5

你出错的地方就是:

    void write(int x)
    {
         dataObject.var = x;
    }
Run Code Online (Sandbox Code Playgroud)

没有dataObject.您正在尝试使您的类依赖于某个全局对象.首先,你必须决定你是否真的想要这个.如果这样做,您需要一种方法来确保这些全局对象在被类使用之前被声明和实例化.

有许多方法可以修复错误,但首先您需要明确您希望类做什么以及它们应该如何相互交互.

如何在没有全局对象的情况下解决此问题的一个示例:

class class1
{
  public:
    class1(data& dataObj) : dataRef_(dataObj) {}
    void write(int x)
    {
      dataRef_.var = x;
    }
  private:
    data& dataRef_;
};
Run Code Online (Sandbox Code Playgroud)

然后在主要:

int main()
{
  data dataObject;
  class1 object1(dataObject);
  object1.write(2);
}
Run Code Online (Sandbox Code Playgroud)