C++ 类成员,它是指向另一个类c++;
s.one能否帮助我理解在这个过程中我做错了什么,这样我就无法访问我的向量“vect”C++ 类成员,它是指向另一个类c++;,c++,class,pointers,object,vector,C++,Class,Pointers,Object,Vector,s.one能否帮助我理解在这个过程中我做错了什么,这样我就无法访问我的向量“vect” #包括 #包括 甲级 { 私人: 公众: A(){} }; B类 { 私人: std::vector-vect; 公众: B(){} void func(){ 标准::cout 看看这个类,你可以看到b从来没有被赋值。除此之外,它是一个指针。这意味着当你调用b->func()时,你试图在一个随机的内存块上调用func()。这是未定义的行为,不幸的是它没有崩溃(因为它隐藏了问题) 您的选择是将B分配给一个值,而
#包括
#包括
甲级
{
私人:
公众:
A(){}
};
B类
{
私人:
std::vector-vect;
公众:
B(){}
void func(){
标准::cout
看看这个类,你可以看到b从来没有被赋值。除此之外,它是一个指针。这意味着当你调用b->func()
时,你试图在一个随机的内存块上调用func()
。这是未定义的行为,不幸的是它没有崩溃(因为它隐藏了问题)
您的选择是将B分配给一个值,而我不解释如何做;您的C++书应该覆盖它;或者将它改为不是指针;(即删除<代码> */COD>)当你创建一个C时,它将为你创建一个新的B。
你很幸运,你的程序运行了,而不是立即崩溃。你能告诉我所示代码中设置类中B
指针的那一行,它指向类B
的一个实例,该实例当时存在,当我tsfunc
()方法被调用?这是一个在启用所有警告的情况下编译的优点示例。例如:。尝试创建一个B实例,这样您就不会有未定义的行为。为什么要乱搞指针?@molbdnilo实际上这只是一个测试代码,我需要在我的原始代码中执行此过程,因为我需要在那里保留我的向量二级类中的对象。
#include <iostream>
#include <vector>
class A
{
private :
public :
A() {}
};
class B
{
private :
std::vector<A*> vect;
public :
B() {}
void func(){
std::cout << vect.size() <<std::endl;
}
};
class C
{
private :
B* b ;
public :
C() { }
void func (){
b->func();
}
};
int main (){
C c;
c.func();
return 0 ;
}
class C
{
private :
B* b ;
public :
C() { }
void func (){
b->func();
}
};