尝试按位重载&在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;
}
我只是收到一条错误消息,指出没有运算符“&”匹配这些操作数。我怎样才能完成这项工作/我做错了什么?
答案 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;
}