按位重载& c ++作为非成员函数

时间:2016-03-12 21:14:43

标签: c++ operator-overloading

尝试按位重载&在c ++中作为非成员函数

myClass.h

class myClass
{
     public:
     myClass(double);
     void setSomeValue(double);
     double getSomeValue() const{
        return someValue;
     }
     /*...more methods...*/


      private:
      double someValue;
};

myClass.cpp

myClass::myClass(double someValue){
    setSomeValue(someValue);
}
myClass::setSomeValue(double someValue){
    this->someValue = someValue;
}
double operator&(myClass &lhs, myClass &rhs){
    return lhs.getSomeValue() * rhs.getSomeValue();

}

有人告诉我,通过类getter访问类私有成员,我应该能够拥有一个未被声明为朋友的非成员函数。但是,当我尝试:

int main(){
    myClass A(0.1);
    myClass B(0.1);

    double test = A & B;
 }

我只是收到一条错误消息,指出没有运算符“&”匹配这些操作数。我怎样才能完成这项工作/我做错了什么?

2 个答案:

答案 0 :(得分:2)

我猜你没有附上你的声明。主程序中的运算符。尝试放置

double operator&(myClass &lhs, myClass &rhs);

在myClass.h文件中。

答案 1 :(得分:1)

以下是您的代码示例的固定版本(我无法在任何阶段重现 no operator "&"matches these operands 错误消息):

myClass.h

class myClass
{
     public:
     myClass() : someValue() {}
     double getSomeValue() const{
        return someValue;
     }
     //...more methods...//


      private:
      double someValue;
};

// ***********************************************************************************
// * You need to make that global operator override visible through the header file: *
// ***********************************************************************************
inline double operator&(myClass &lhs, myClass &rhs){
    return lhs.getSomeValue() * rhs.getSomeValue();

}

main.cpp

#include <iostream>
#include "myClass.h"

int main(){
    myClass A;
    myClass B;

    double test = A & B;
    std::cout << test << std::endl;

 }

Live Demo