我的朋友功能无法访问私有变量

时间:2017-04-24 23:36:06

标签: c++ class operator-overloading friend

所以我正在尝试构建一个类,它可以保存有关原子元素的信息,然后用它们进行计算。我的重载* friend函数出错了,它说变量atom_weight在函数的上下文中是私有的,但是它是朋友所以它不应该是

// The chemical class
class Chemical{
        public:
        Chemical();
        Chemical(string chemsym);
        Chemical(string chemsym, int number, double weight);
        void get_element(string chemsym, ifstream& fin);
        void clear();
        friend Chemical operator +(Chemical& molecule, Chemical& element);
        friend Chemical operator *(const Chemical element, int multiplier);
        friend Chemical operator >>(istream& ins, Chemical element);
        friend Chemical operator <<(ostream& outs, Chemical element);
        string get_sym();
        int get_num();
        double get_weight();
        private:
        string chemsym;
        int atom_num;
        double atom_weight;
};

然后这是我的重载*运算符的函数定义。

Chemical operator *(const Chemical& element, int multiplier){
        Chemical tempele;
        string number;
        tempele.atom_weight = element.atom_weight * multiplier;
        number = itostr(mulitplier);
        tempele.chemsym = element.chemsym + number;
        return tempele;
}

我的大多数操作员都遇到了类似的错误,但即使我找不到任何差异,我的补充也是如此。如果有人对如何解决这个问题有任何见解,那就太棒了。

1 个答案:

答案 0 :(得分:0)

同时的函数声明是函数定义与类中的函数声明不对应。声明像

这样的函数
friend Chemical operator *(const Chemical &element, int multiplier);
                                          ^^