2012-05-20 81 views
1

我遇到了一些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


main.cpp回声是不同的,我不能原谅。

+0

Egads!假设你是新手使用类C语言,我想建议你调查许多决斗支架样式并选择一个更常见的样式。请。甚至GNU。 – dmckee

回答

3

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

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

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

  • 有在B中的A型的构件和具有静态存储持续时间返回构件的地址

  • 具有类型A的对象,如指针本身。

这三者之间的决定在很大程度上取决于您的问题的背景,这是不能从您的问题中推演出来的。

还有一件事。 嵌套类是在另一个类的范围内定义的类。你的例子中没有嵌套类。

+0

那么,在B.cpp中可以解决这个问题吗? A * a = new A(par1,par2); Aglobale = a; and than main.cpp我会用 cout << b.Aglobal-> parametro; – Antoz87

+0

@ Antoz87:是的,那会解决它。 –

+0

非常感谢。 – Antoz87

0

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

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

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

    //class members 
}; 
+0

例如,我该如何解决它? A有哪些不同的解决方案? – Antoz87