2015-08-31 101 views
1

我有點的一個類的數據存儲部件類(輸入)的成員類:訪問的指針,其存儲一個指針到另一個構件類

class Calc 
{ 
public: 
    Calc(Inputs *input) : input(input) {} 
    void performCalc(); 
private: 
    Inputs *input; 
}; 

在輸入I類存儲各種數據的輸入:

class Inputs 
{ 
public: 
    Inputs(std::string &directory, LogFile &log); 
    ~Inputs(); 

private: 

    WriteLogFile &writeToLog; 
    WeatherData *weather; 
    EvaporationData *evaporation; 

friend class Calc; 

} 

現在,當我在performCalc()方法,我無法訪問我的天氣類中的輸入對象,它是用指針​​表示法的計算值類的成員?

input->weather //does not work 

也沒有點號的工作(這是我沒想到它會,因爲沒有被鏈接按引用傳遞在這裏。)

input.weather //does not work 

我缺少什麼?

編輯:對不起!我忘了提及Calc類已經是輸入類的friend class

+1

'天氣'在'Inputs'中是私人的,因此除非您聲明類或函數'friend',否則無法從'Inputs'外部訪問。 – skyking

回答

3

您已將weather定義爲Inputs的私人成員,因此您的Calc對象不可見。您有3個選項:

  1. 使weather公開。
  2. 品牌Calc朋友Inputs
  3. 創建weather getter方法(推薦,因爲它提高了封裝)
0

由於「輸入」類的「天氣」成員在私人領域,你想從計算器類「訪問performCalc '方法,它在Input類之外。我認爲這是上面的reasone不起作用。

將'weather'變量放入Input類的public字段中,或者使用get()方法訪問Input類的private字段。

class Inputs 
{  
public: 
    Inputs(std::string &directory, LogFile &log); 
    ~Inputs(); 
    WeatherData* getWeatherData(){ 

    return weather ; 
    } 
private: 

    WriteLogFile &writeToLog; 
    WeatherData *weather; 
    EvaporationData *evaporation; 
} 
相關問題