在c ++中,我在类的头文件中声明了一个向量。在cpp文件中,当我尝试访问向量或将新元素推送到向量时,它会导致程序终止。如何解决这个问题?
MyClass.h
MyClass{
private:
vector<Group*> myVector;
public:
MyClass();
void someMethod(string group_name);
};
MyClass.cpp
MyClass::MyClass(){
}
void MyClass::someMethod(string group_name){
if(myVector.empty()){ // cause error
cout << "empty" << endl;
}
Group g(group_name);
myVector.push_back(&g); // also cause error
}
我在主程序中调用了someMethod
MyClass *myclass;
myclass->someMethod("aaa");
答案 0 :(得分:4)
if(myVector.empty()){ // cause error
不,这段代码很好。其他东西在这里造成错误。
Group g(group_name);
myVector.push_back(&g); // also cause error
然而,这段代码是一场等待发生的灾难。当g
超出范围时,它会被销毁,而myVector
中存储的指针指向随机的东西。任何以后使用该指针都可以做一些奇怪的事情,包括看起来工作正常。
答案 1 :(得分:2)
你没有创建MyClass的实例:MyClass *myClass = new MyClass();
,所以myClass只包含一些垃圾。
答案 2 :(得分:-1)
MyClass *myclass;
myclass->someMethod("aaa");
您正尝试取消引用包含垃圾值的指针,代码应如下所示:
MyClass *myclass;
//初始化myclass实例
Myclass cMyclass
//将它指定给指向myClass的指针:
myclass = &cMyclass
//然后你可以取消引用它:
myclass->someMethod("aaa");