c ++在头文件中声明向量

时间:2016-02-27 13:39:40

标签: c++ vector

在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");

3 个答案:

答案 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");