CS学生在这里,第一篇文章。
我正在处理两个对象。 obj1
通过引用传递给obj2
。 obj2
处理文件中的数据并将信息写入obj1
中的char []。然后obj1
评估char数组中的信息。
但是,只要obj2
中写入char []的函数超出范围,所有已写入的信息都将被清除。我已经介入了代码,我很清楚obj1
没有通过引用传递,但我无法弄清楚为什么。任何人都可以帮我看看我错过了什么?
int main(int argc, char* argv[])
{
//...
Object1 obj1; // obj1 created with &1
Object2 obj2(filename, obj1);
obj2.func1(); // void function that writes to obj1.arr -> writes fine but to a obj1.arr @ &2
obj1.func1(); // obj1.arr @ &2 is gone, obj1.arr @ &1 is garbage.
}
// Object1.h
class Object1
{
Object1() = default;
char arr[size];
}
// Object2.h
class Object2
{
public:
Object1 obj1;
string filename;
}
// Object2.cpp
Object2::Object2(string filename, Object1& obj1)
: filename(filename), obj1(obj1)
{
}
我想你的问题可能在这里:
// Object2.h
class Object2
{
public:
Object1 obj1;
请注意,Object2
有一个名为obj1
的成员变量,并且您的Object2
构造函数正在使用作为参数传递给构造函数的引用初始化该成员变量:
Object2::Object2(string filename, Object1& obj1)
: filename(filename), obj1(obj1)
{
另请注意,obj1(obj1)
的含义在这里并不明显 - 您已经命名了第二个构造函数参数obj1
,但您还有名为obj1
的本地成员变量。为了避免人类读者的歧义,您应该更改参数的名称或成员变量的名称。
您可能还想将Object2类的成员变量的类型从Object1
更改为Object1 &
,如果您的意图是Object2
对象应该继续直接引用原始obj1
对象而不是使用自己单独的Object1
成员对象。