2017-05-20 46 views
1

setwidth()是类Box的成员函数,它也是Sbox类的朋友函数,它设置两个类的成员width的值。作为另一个类的成员函数的朋友函数设置值

Sboxwidth的值未正确设置/显示。

#include<iostream> 

using namespace std; 

class Sbox; 

class Box{ 
    private: 
     double width; 
    public: 
     friend void printwidth(Box box); 
     void setwidth(Sbox sbox, double wid); 
}; 

class Sbox { 
    private: 
     double width; 
    public: 
     friend void Box::setwidth(Sbox sbox, double wid); 
     void printwidth() { 
      cout << "the width of small box: " << width; //this value is coming wrong 
     } 
}; 

void Box::setwidth(Sbox sbox, double wid) { 
    width = wid; 
    sbox.width = wid; 
} 

void printwidth(Box box) { 
    cout << "width of the box: " << box.width << endl; 
} 

int main() { 
    Box box; 
    Sbox sbox; 
    box.setwidth(sbox, 10.77); 
    printwidth(box); 
    sbox.printwidth(); 
    return 0; 
} 

回答

1

您需要通过引用传递Sbox。将这个符号添加到这三行中。

void setwidth(Sbox& sbox,double wid);

friend void Box::setwidth(Sbox& sbox,double wid);

void Box::setwidth(Sbox& sbox,double wid)

你是通过你的sbox由值,这意味着复印的内部setwidth使用的正确性。然后,您的代码将更改该副本的宽度sbox,但副本将在setwidth的末尾销毁,并且功能外部的原始sbox保持不变。

添加&Sbox参数按引用传递,这意味着一个拷贝决不制成,并且因此内部setwidthsbox是相同的对象外的一个。

有一个在这里读:How to pass objects to functions in C++?

+1

它的工作,谢谢 – falco97

相关问题