我在 complex
中创建了一个 complex.h
结构并重载了一系列运算符(包括 ^
)来处理四个操作 complex+double
、double+double
、 complex+complex
、double+complex
:
complex operator^(complex& lhs,complex& rhs){
double new_mag = std::pow(mag(lhs),rhs.re);
double new_arg = angle(lhs.re,lhs.im) * rhs.re;
return complex(new_mag * std::cos(new_arg),new_mag * std::sin(new_arg));
}
然后我在包含 calc.cpp
的文件 complex.h
中定义了两个结构体,即 op
和 func
:
struct op{
char symbol;
uint8_t precedence;
uint8_t assoc;
uint8_t type;
std::function<complex (complex,complex)> operate;
};
struct func{
std::string symbol;
uint8_t type;
std::function<complex (complex,complex)> operate;
};
其中每个结构还定义了一个函数。然后我尝试在同一个文件中初始化这些结构的对象:
op op6{'^',4,RIGHT,BINARY,[] (complex a,complex b){return b ^ a;}}; // no errors
// no operator "^" matches these operands -- operand types are: complex ^ complex
func f10{"sqrt",ONE_INPUT,complex b){return a ^ complex(1/2);}};
我也尝试将 complex(1/2)
保留为双精度 .5
但这给了我同样的错误,除了操作数类型 complex ^ double
。
我的问题是操作符 ^
如何不匹配 complex
类型的操作数,当它被定义为这样做时,并且在 op6
的初始化中这样做?