【发布时间】:2016-11-21 16:29:41
【问题描述】:
在我的 C++ 程序中,我有一个类,其成员变量是指向另一个类对象的指针向量。它还有一个成员函数,应该将输入对象的引用添加到该指针向量,然后在向量中打印所有对象的名称以确保它正常工作。我使用此函数添加Obj1 和Obj2,并希望控制台输出Obj1,然后输出Obj1Obj2,但它输出Obj1,然后输出Obj2Obj2。有人可以解释为什么会发生这种情况,更重要的是如何解决它?
我正在使用 Visual Studio 2015。这是程序的代码。
using namespace std;
class MyClass1 {
public:
string name;
MyClass1(string a) {
name = a;
}
};
MyClass1 Obj1("Obj1");
MyClass1 Obj2("Obj2");
class MyClass2 {
public:
vector<MyClass1*> vop;
string name;
MyClass2(string a) {
name = a;
}
void addObjtoVec(MyClass1 mc) {
vop.push_back(&mc);
for (int i = 0; i < vop.size(); i++) {
cout << vop[i]->name;
}
cout << endl;
}
};
MyClass2 Obj3("Obj3");
int main() {
Obj3.addObjtoVec(Obj1);
Obj3.addObjtoVec(Obj2);
}
【问题讨论】:
-
用
void addObjtoVec(MyClass1 *mc) {替换void addObjtoVec(MyClass1 mc) {,用vop.push_back(mc);替换vop.push_back(&mc);,用Obj3.addObjtoVec(&Obj1);替换Obj3.addObjtoVec(Obj1);,用Obj3.addObjtoVec(&Obj2);替换Obj3.addObjtoVec(Obj2); -
成功了,非常感谢。