我写了一个应用程序,其中我经常使用pow
库中的math.h
函数。我试图重载operator^
以使取幂更容易,更快。我写了这段代码:
#include <iostream>
#include <math.h>
using namespace std;
int operator^(int, int); // line 6
int main(int argc, char * argv[]) { /* ... */ }
int operator^(int a, int n) // line 21
{
return pow(a,n);
}
编译器(我在Linux上使用g ++)给我发了这些错误:
main.cpp:6:23:错误:'int operator ^(int,int)'必须有一个参数 类或枚举类型main.cpp:21:27:错误:'int operator ^(int, int)'必须有类的参数或枚举类型
答案 0 :(得分:9)
您不能让操作员超载以仅在内置类型上操作。
至少有一个参数必须是用户定义的类或枚举类型(或对其中一个的引用),如编译器错误消息中明确说明的那样。
答案 1 :(得分:6)
我试图重载operator ^以使取幂更容易和更快
你错误拼写令人困惑,因为它肯定不是更快也不容易。 任何维护您的代码都会让您讨厌。
幸运的是,C ++至少需要一个参数是用户定义的类型,所以你不能这样做。