2012-05-20 117 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