2

列挙型を反復処理するために、この質問に従っています。

enum class COLOR
{
    Blue,
    Red,
    Green,
    Purple,
    First=Blue,
    Last=Purple
};

COLOR operator++( COLOR& x ) { return x = (COLOR)(((int)(x) + 1)); }

COLOR operator*(COLOR c) {return c;}

COLOR begin(COLOR r) {return COLOR::First;}
// end iterator needs to return one past the end!
COLOR end(COLOR r)   {return COLOR(int(COLOR::Last) + 1);}

問題は、私のプロジェクトには、個別にコンパイルされたファイルcppが多数あることです。hppコンパイラは の実装に直接アクセスする必要があるようですoperator++。で宣言してからファイルでhpp実装するとcpp、エラーが発生します。

コンパイラの警告: インライン関数 'Color operator++(Color&)' が使用されていますが、定義されていません

リンカ エラー:「operator++(instruction_type&)」への未定義の参照

で直接定義するとhpp、別のエラーが発生します

... の複数定義

operator*beginおよびendリンカー内。

4

1 に答える 1

2

4 つの関数の前にキーワードを追加するinlineと、複数の定義エラーなしでそれらをヘッダーで定義できます。例えば:

inline COLOR operator*(COLOR c) {return c;}

または、プロトタイプのみを .h ファイルに含めて、1 つの .cpp ファイルで関数を定義することもできます。

于 2015-09-06T04:04:25.563 に答える