C ++嵌套类问题

时间:2012-05-20 11:35:23

标签: c++

我在使用C ++和嵌套类时遇到了一些问题。例如:

在main.cpp

int main()
{

B b(par);
cout << b.Aglobal->parametro;
cout << b.Aglobal->parametro;
return 0;}

在B.cpp

B: B(type par)
{

A a(par1,par2);
Aglobal=&a;}

在B.h

class B
{
public:
    B(type);
    A *Aglobal;}

在A.h

class A
{

public:
    A(type1,type2);
    int parametro;}

main.cpp的回声是不同的,我无法理解原因。

2 个答案:

答案 0 :(得分:3)

在B的构造函数中定义类型A的局部变量,并返回指向该局部变量的指针。使用该指针会导致未定义的行为,因为它指向的对象不再存在。

问题的解决方案可能包括:

  • 在堆上分配A对象。但是然后尝试将其包装在适当的智能指针中,而不是简单的指针。

  • 在B中拥有A类成员并返回成员的地址

  • 让A类型的对象具有静态存储持续时间,就像指针本身一样。

这三者之间的决定在很大程度上取决于你问题的背景,而你的问题无法解决这个问题。

还有一件事。 嵌套类是在另一个类的范围内定义的那些类。您的示例中没有嵌套类。

答案 1 :(得分:0)

在B构造函数中,您将保存局部变量的地址。有几种方法可以解决这个问题,正确的方法取决于你想用A做什么。

此外,您没有嵌套类。嵌套类在另一个类中定义,如下所示:

class OuterClass {
    class InnerClass {
        //class members
    };

    //class members
};