1

對此可能有一個非常簡單的修復方法,但它目前讓我難以理解。所以,我寫C++類的效果:沒有類聲明的朋友成員函數

Header.h:

#pragma once 
//... 
class arrayObj 
{ 
private: 
    // some variables... 
public: 
    //constructor, destructor, getters, etc... 
    friend void objManager::foo(); 
}; 
//... 
class objManager 
{ 
private: 
    //... 
    std::vector<std::shared_ptr<arrayObj>> array; 
public: 
    void foo(); 
    //other methods... 
}; 

現在,作爲 - 是,我的編譯器不會發現objManager的類聲明(或成員函數)宣佈爲朋友包容。但是,通過在arrayObj之前放置objManager聲明,不再爲共享指針的內部向量聲明arrayObj。有沒有什麼辦法可以在這個實例中轉發declare objManager,或者在不拆除objManager的情況下解決這個問題?

回答

2

你需要前瞻性聲明arrayObj,然後把objManager的完整定義,然後最後的arrayObj定義:

class arrayObj; 

class objManager { 
    std::vector<std::shared_ptr<arrayObj>> array; // OK, fwd-declare is fine for this 

public: 
    void foo(); 

    // etc. 
}; 

class arrayObj { 
public: 
    friend void objManager::foo(); 
    // etc. 
}; 

爲了宣佈一個朋友,該方法具有已經被看,所以它必須先走。前向聲明是矢量的結果。

+0

這工作 - 謝謝。 – Huntrontrakkr 2014-11-22 00:53:21