2011-06-09 70 views
3

我無法讓指針正常工作。在我的主文件,我宣佈指針麻煩

Analysis2 analysis = Analysis2(); 
MaxResults maxresults = MaxResults(analysis); 
在我的maxResults類

現在,我想指出的分析,這樣,如果任何變量的改變我仍然得到正確的值。現在,我宣佈在的maxResults頭部構造爲

MaxResults(Analysis2 analysis); 
Analysis2 * analysis2; 

而且在類的maxResults

MaxResults(Analysis2 analysis) 
{ 
    analysis2 = analysis; 
} 

當我嘗試從改變分析訪問的事情,分析2似乎並沒有被跟上。我該如何解決這個問題,是否有一種簡單的方法來記住指針以及將來的引用和解引用?

+3

其中哪些是應該是指針?請嘗試發佈類似C++的東西。 – 2011-06-09 16:46:09

+0

我想要分析2指向分析(因此指向在該作業之後所做的所有更改) – mrswmmr 2011-06-09 16:48:18

回答

3

如果你想MaxResults的指針保持到Analysis2對象,你應該做的是這樣的:

class MaxResults { 

public: 
    MaxResults(Analysis* an) : analysis(an) {} 

private: 
    Analysis* analysis; 
}; 

,構建這樣的:

Analysis2 analysis = Analysis2(); 
MaxResults maxresults = MaxResults(&analysis); 

注意地址的使用-of操作符(&)捕獲analysis的地址,並將其作爲指針傳遞給構造函數MaxResults,該構造函數將指針保存在成員中(使用初始化列表或多或少相當於在構造函數體內執行analysis = an,以防:語法對您而言是新的)。

如需進一步閱讀,請參考參考資料(當然,一旦您對指針有了更好的理解)。在這種情況下,引用可能是首選。

+0

我會*不推薦使用通過引用進行調用並保持比對象更長的功能調用本身。這裏使用指針是完全正確的。 – fredoverflow 2011-06-09 16:59:22

1

我不太確定那是如何編譯的;它不應該。問題是你的構造函數。首先,如果你的構造函數只需要一個參數Analysis2,那麼這個參數是按值傳遞的;該對象總是被複制。指針無法指向傳入的實際對象,因爲構造函數只會獲取它的副本。你需要使用一個基準參數:

MaxResults(Analysis2& analysis); 

其次,你不能直接將對象分配給一個指向對象。您需要使用&運算符來獲取對象的地址。

MaxResults(Analysis2& analysis) 
{ 
    analysis2 = &analysis; 
} 

在一個不相關的說明:使用構造函數的成員初始值設定項列表是一種很好的風格。

MaxResults(Analysis2& analysis) 
    : analysis2(&analysis) 
{ 
} 
+0

它正在編譯,直到我意識到analysis2不是鏡像分析,然後當我將代碼更改爲上面所看到的代碼時,代碼崩潰了,而我只是不知道如何正確指定指針 – mrswmmr 2011-06-09 16:52:51

+0

啊,我明白了。是的,這是因爲'analysis2'的類型是指向Analysis2的指針,'analyze'的類型就是Analysis2。編譯器不會自動從一個轉換到另一個。你需要使用操作符。從一個對象到一個指向該對象的指針的運算符是'&';另一個方向是'*'。 (注意:從技術上講,這些不是轉換,但這是一般想法。) – 2011-06-09 16:54:28

+0

我不會混用這樣的引用和指針。只需使用指針並讓客戶端輸入額外的'&'字符。 – fredoverflow 2011-06-09 17:00:22

0

當你調用MaxResults maxresults = MaxResults(analysis);,你的構造得到的analysis副本。您需要傳遞對analysis的引用,以便構造函數獲取它可以存儲在指針中的地址。這樣maxresults有一個指向原始對象的指針,而不僅僅是原始對象的副本。

做這樣的事情在頭:

MaxResults(Analysis2 *analysis); 
Analysis2* analysis2; 

爲此在類定義:

MaxResults(Analysis2 *analysis) 
{ 
    analysis2 = analysis; 
} 

並創建對象是這樣的:

Analysis2 analysis = Analysis2(); 
MaxResults maxresults = MaxResults(&analysis);