我在使用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的回声是不同的,我无法理解原因。
答案 0 :(得分:3)
在B的构造函数中定义类型A的局部变量,并返回指向该局部变量的指针。使用该指针会导致未定义的行为,因为它指向的对象不再存在。
问题的解决方案可能包括:
在堆上分配A对象。但是然后尝试将其包装在适当的智能指针中,而不是简单的指针。
在B中拥有A类成员并返回成员的地址
让A类型的对象具有静态存储持续时间,就像指针本身一样。
这三者之间的决定在很大程度上取决于你问题的背景,而你的问题无法解决这个问题。
还有一件事。 嵌套类是在另一个类的范围内定义的那些类。您的示例中没有嵌套类。
答案 1 :(得分:0)
在B构造函数中,您将保存局部变量的地址。有几种方法可以解决这个问题,正确的方法取决于你想用A做什么。
此外,您没有嵌套类。嵌套类在另一个类中定义,如下所示:
class OuterClass {
class InnerClass {
//class members
};
//class members
};