3

ライブラリの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)' が必要ですクラスまたは列挙型の引数を持つ

4

2 に答える 2

9

組み込み型のみを操作するために演算子をオーバーロードすることはできません。

引数の少なくとも 1 つは、コンパイラ エラー メッセージに明確に示されているように、ユーザー定義のクラスまたは列挙型 (またはそれらのいずれかへの参照) である必要があります。

于 2012-05-09T07:07:06.410 に答える
6

累乗を簡単かつ高速にするために、演算子 ^ をオーバーロードしようとしました

それは確かに速くも簡単でもないので、あなたは紛らわしいスペルを間違えました。あなたがこれをした場合、あなたのコードを維持している人は誰でもあなたを嫌うでしょう。

幸いなことに、C++ では少なくとも 1 つのパラメーターがユーザー定義型である必要があるため、これを行うことはできません。

于 2012-05-09T07:09:41.580 に答える