将对象传递到另一个类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; }
知道我哪里出错了吗? 提前谢谢 编辑: 谢谢你的建议。我现在的代码是:将对象传递到另一个类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; },c++,C++,知道我哪里出错了吗? 提前谢谢 编辑: 谢谢你的建议。我现在的代码是: #include <iostream> using namespace std; class class1 { public: void write(data &dataObject, int x) { dataObject.var = x; } }; class class2 { public:
#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;
}
#包括
使用名称空间std;
一班
{
公众:
无效写入(数据和数据对象,int x)
{
dataObject.var=x;
}
};
二级
{
公众:
无效读取(数据对象)
{
std::cout在这一点上,你会出错:
void write(int x)
{
dataObject.var = x;
}
没有dataObject
。您正试图使您的类依赖于某个全局对象。首先,您必须确定是否确实需要它。如果需要,您需要一种方法来确保在类使用这些全局对象之前声明和实例化这些全局对象
修复错误的方法有很多,但首先需要明确希望类做什么,以及它们应该如何相互交互
关于如何在没有全局对象的情况下修复此问题的一个示例:
class class1
{
public:
class1(data& dataObj) : dataRef_(dataObj) {}
void write(int x)
{
dataRef_.var = x;
}
private:
data& dataRef_;
};
然后大体上:
int main()
{
data dataObject;
class1 object1(dataObject);
object1.write(2);
}
在这一点上,你会犯错误:
void write(int x)
{
dataObject.var = x;
}
没有dataObject
。您正试图使您的类依赖于某个全局对象。首先,您必须确定是否确实需要它。如果需要,您需要一种方法来确保在类使用这些全局对象之前声明和实例化这些全局对象
修复错误的方法有很多,但首先需要明确希望类做什么,以及它们应该如何相互交互
关于如何在没有全局对象的情况下修复此问题的一个示例:
class class1
{
public:
class1(data& dataObj) : dataRef_(dataObj) {}
void write(int x)
{
dataRef_.var = x;
}
private:
data& dataRef_;
};
然后大体上:
int main()
{
data dataObject;
class1 object1(dataObject);
object1.write(2);
}
您的类不知道变量dataObject
。如果希望它们能够访问类data
的实例,则需要将它们传递给您的函数。重新定义如下函数
void read(const data& dataObject)
{
std::cout << dataObject.var;
}
void读取(常量数据和数据对象)
{
std::cout您的类不知道变量dataObject
。如果希望它们能够访问类数据的实例,则需要将它们传递给函数。重新定义如下函数
void read(const data& dataObject)
{
std::cout << dataObject.var;
}
void读取(常量数据和数据对象)
{
std::cout您正在将参数传递给成员函数read
和write
,但这些函数未定义为接受参数
将其重新定义为:
// for class1:
void write(data &dataObject, int x)
{
dataObject.var = x;
}
// for class2:
void read(data dataObject)
{
std::cout << dataObject.var << endl;
}
您正在将参数传递给成员函数read
和write
,但这些函数未定义为接受参数
将其重新定义为:
// for class1:
void write(data &dataObject, int x)
{
dataObject.var = x;
}
// for class2:
void read(data dataObject)
{
std::cout << dataObject.var << endl;
}
好的,我明白了。我如何使一个对象成为全局对象。我可以在main之外声明它吗?不完全可以,但是你可以有静态
对象。关于这一点有很多问题,但你不应该使用全局对象,除非你绝对必须这样做。@user1487087我添加了一个例子,其中你的一个类引用了数据
。因此,数据
实例不必是全局的,只需在main
中定义即可。好的,我明白了。我如何使对象成为全局的。我可以在main之外声明它吗?不完全可以,但您可以拥有静态
对象。这方面存在一些问题,但除非您完全必须使用全局对象,否则不应该使用全局对象。@user1487087我添加了一个示例,其中您的一个类引用了data
。因此data
实例不必是全局的,只需在main
中定义即可。好的。我还可以用object2.read(data-dataObject)从main调用它吗;如果重新定义函数以将数据的实例作为参数,则可以can@user1487087或者,您可以让您的classN
类引用数据,如我的示例所示。@user1487087从上面的代码可以看出,拥有成员对象(或引用成员对象)更有意义在一个新类中,正如juanchopanza所说。基本上你有3个类对一个整数做不同的事情,这看起来不必要地复杂化了Dok。我还能用object2.read(data dataObject)从main调用它吗;如果重新定义函数以将数据的实例作为参数,则可以can@user1487087或者,您可以让您的classN
类引用数据,如我的示例所示。@user1487087从上面的代码可以看出,拥有成员对象(或引用成员对象)更有意义在一个新类中,正如juanchopanza所说。基本上,你有3个类对一个整数做不同的事情,这看起来不必要的复杂。我已经更改了它们。我仍然可以用同样的方式调用它们吗?因为当我运行时,我得到:第8行:没有声明错误“data”。我现在只传递main中的对象,就像你建议的那样但我仍然在“void write(data&dataObject,intx)”和“void read(data-dataObject)”行上遇到错误(错误“data”尚未声明)。好的,我已经更改了它们。我仍然可以用同样的方式调用它们吗?因为当我运行时,我得到:第8行:错误“data”尚未声明。我现在只传递main中的对象,就像你建议的那样,但我仍然在“void write(data&dataObject,int x)”和“void read(data dataObject)”行上得到一个错误(错误“data”尚未声明)。您只需将数据
类的声明放在类1
和类2
的声明之前,因为它们需要了解数据
的所有信息。您只需将数据
类的声明放在类1
和类2
的声明之前,因为它们需要了解所有关于数据的信息。