【问题标题】:class member which is pointer to another class , c++类成员,它是指向另一个类的指针,c++
【发布时间】:2018-04-12 11:02:43
【问题描述】:

请帮助我理解我在这个过程中做错了什么,这样我就无法访问我的向量“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”!!!!

【问题讨论】:

  • 很幸运,您的程序完全运行,而不是立即崩溃。您能否指出显示代码中将您的类中的b 指针设置为指向当时存在的类B 的实例的确切行,并且当它的func( ) 方法被调用?
  • 启用所有警告的编译优点示例。例如:"warning: 'c.C::b' is used uninitialized in this function".
  • 尝试创建一个 B 的实例,这样你就没有未定义的行为
  • 你为什么要搞乱指针?
  • @molbdnilo 实际上它只是一个测试代码,我需要在我的原始代码中执行此过程,因为我需要将我的对象向量保留在二级类中。

标签: c++ class pointers object vector


【解决方案1】:
class C 
{
private :
    B* b ;

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

只看这个类;您可以看到从未分配过 b 。除此之外,它是一个指针。这意味着当您调用b-&gt;func() 时,您正在尝试在随机内存块上调用func()。这是未定义的行为,你很不幸它没有崩溃(因为它隐藏了问题)。

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

【讨论】:

    猜你喜欢
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    相关资源
    最近更新 更多