2012-11-21 143 views
0

我有2類:預算和AuxiliaryOffice,我使用的朋友功能:朋友AuxiliaryOffice :: addBudget(double,Budget &);訪問預算的私人會員corpDivision。類的朋友

auxil.h

#ifndef AUXIL_H 
#define AUXIL_H 
class Budget; 
class AuxiliaryOffice 
{ 
private: 
    double auxBudget; 
public: 
    AuxiliaryOffice(){auxBudget=0.0;} 
    double getDivisionBudget()const{return auxBudget;} 
    void addBudget(double b, Budget &); 
}; 
#endif 

budget.h

#include"auxil.h" 
#ifndef BUDGET_H 
#define BUDGET_H 
class Budget 
{ 
private: 
    static double corpDivision; 
    double divisionBudget; 
public: 
    Budget(){divisionBudget=0.0;} 
    void addBudget(double b){divisionBudget+=b; corpBudget+=b;} 
    double getDivisionBudget()const{return divisioBudget;} 
    double getCorpDivision()const{return corpDivision;} 
    friend AuxiliaryOffice::addBudget(double,Budget &); 
}; 
#endif 

auxil.cpp

#include"auxil.h" 
#include"budget.h" 

void AuxiliaryOffice::addBudget(double b, Budget& div) 
{ 
    auxBudget+=b; 
    **div.corpDivision+=b;** //this line it is the problem. 
} 

div.corpDivision + = B - >預算:: corpDivision是不可訪問

+0

您有問題嗎? –

+4

你的示例有幾個問題,特別是'corpBudget'沒有聲明,你的朋友聲明沒有返回類型。請在此工作。 –

+1

請參閱http://sscce.org瞭解如何製作演示您的問題的示例程序。 –

回答

0

經過一番嘗試,它可以工作,雖然我不得不糾正您的示例中的幾個問題:

class Budget; 
class AuxiliaryOffice 
{ 
private: 
    double auxBudget; 
public: 
    // It would be a good idea to add spaces to your code to help other reading it 
    AuxiliaryOffice() { auxBudget = 0.0; } 
    double getDivisionBudget() const { return auxBudget; } 
    void addBudget(double b, Budget &); 
}; // so far, so good  

class Budget 
{ 
private: 
    static double corpDivision; 
    double divisionBudget; 
    double corpBudget; // ** this was missing ** 

public: 
    Budget() { divisionBudget = 0.0; } 
    void addBudget(double b) { divisionBudget += b; corpBudget+=b; } 
    double getDivisionBudget() const { return divisionBudget; } 
    double getCorpDivision() const { return corpDivision; } 

    // ** note the "void" here, missing from your sample 
    friend void AuxiliaryOffice::addBudget(double, Budget&); 
}; 

// this is also required to compile properly, usually in a Budget.cpp file 
double Budget::corpDivision;