Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++;在头文件中声明向量 在C++中,我在类的头文件中声明了一个向量。在cpp文件中,当我尝试访问向量或将新元素推送到向量时,会导致程序终止。如何解决这个问题_C++_Vector - Fatal编程技术网

c++;在头文件中声明向量 在C++中,我在类的头文件中声明了一个向量。在cpp文件中,当我尝试访问向量或将新元素推送到向量时,会导致程序终止。如何解决这个问题

c++;在头文件中声明向量 在C++中,我在类的头文件中声明了一个向量。在cpp文件中,当我尝试访问向量或将新元素推送到向量时,会导致程序终止。如何解决这个问题,c++,vector,C++,Vector,MyClass.h MyClass{ private: vector<Group*> myVector; public: MyClass(); void someMethod(string group_name); }; 不,这个代码很好。这里有其他原因导致错误 Group g(group_name); myVector.push_back(&g); // also cause error 然而,这段代码是一场即

MyClass.h

MyClass{
    private:
       vector<Group*> myVector;

    public:
       MyClass();
       void someMethod(string group_name);
};
不,这个代码很好。这里有其他原因导致错误

Group g(group_name);
myVector.push_back(&g); // also cause error

然而,这段代码是一场即将发生的灾难。当
g
超出范围时,它将被销毁,存储在
myVector
中的指针指向随机内容。以后使用该指针可能会产生奇怪的效果,包括看起来工作正常。

您没有创建MyClass的实例:
MyClass*MyClass=new MyClass(),所以myClass只包含一些垃圾

MyClass *myclass;
 myclass->someMethod("aaa");
您试图取消引用包含垃圾值的指针,代码应如下所示:

MyClass *myclass;
//初始化myclass实例

Myclass cMyclass
//将其分配给指向myClass的指针:

myclass = &cMyclass
//然后可以取消对其的引用:

 myclass->someMethod("aaa");

你介意发帖吗?我觉得那些抛出错误的行很好。然而,将对局部变量的引用推到向量上是一个坏主意(参见Pete的答案),但要得到真正的答案,您至少应该发布抛出的异常和重现问题所需的完整(但最小!)代码(即someMethod是如何调用的?)我的问题是最小的、完整的和可验证的。问题是什么?问题是这段代码中没有任何东西会直接导致分段错误。是的,将指针推到即将被销毁的变量是一个非常糟糕的主意,但在调用empty或push_back时,不应该因此而出现seg错误。根据您给我们的信息,我们现在只能推测。@NoName不,您的问题是无法验证的,因为至少在
MyClass
中没有调用函数的
main()
函数。即使使用vector并添加带有push\u back的元素也不起作用
Myclass cMyclass
myclass = &cMyclass
 myclass->someMethod("aaa");