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)
{
}
答案 0 :(得分:1)
我认为您的问题可能在这里
// Object2.h
class Object2
{
public:
Object1 obj1;
请注意,Object2
有一个名为obj1
的成员变量,并且您的Object2
构造函数正在使用作为参数传递给构造函数的引用来初始化该成员变量。 :
Object2::Object2(string filename, Object1& obj1)
: filename(filename), obj1(obj1)
{
还请注意,obj1(obj1)
的含义在这里并不明显-您已将第二个构造函数参数命名为obj1
,但是您还具有名为obj1
的本地成员变量。 。为了避免对人类读者造成歧义,您应该更改参数名称或成员变量名称。
如果您的意图是Object1
对象应继续引用原始对象,则可能还希望将Object2类的成员变量的类型从Object1 &
更改为Object2
。直接使用obj1
对象,而不使用其自己的单独Object1
成员对象。