类成员,它是指向另一个类的指针,c ++

时间:2018-04-12 11:02:43

标签: c++ class pointers object vector

可以帮助我理解我在这个过程中做错了什么,这样我就无法访问我的矢量“vect”

#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 ;

}

我希望得到“0”作为输出,但似乎矢量没有被加入所以我得到无关的数字“17591314330723”!!!!

1 个答案:

答案 0 :(得分:1)

class C 
{
private :
    B* b ;

public :
    C() { }
    void func (){
        b->func();
    }
};

看着这堂课;你可以看到b从未被分配过。除此之外,它是一个指针。这意味着当您致电b->func()时,您试图在随机内存上调用func()。这是未定义的行为,你不幸的是它不仅崩溃(因为它隐藏了问题)。

您的选择是将b分配给值;我不打算解释怎么做;你的C ++书应该涵盖那个;或者将其改为不是指针; (即删除*),这将在您创建C时为您创建新的B.

相关问题