0

クラス「configuration」で使用されるクラス「eventZone」を定義しました

class configuration { ... QMap<QString, eventZone> zones ... }

慌ただしくまで、私はのこぎりのようなforループをうまく使用しました

for(eventZone evz : config.zone.values()) { ... }

ただし、eventZoneのコピーコンストラクターを実装したため、これは機能しません(シリアル化して構成を保存できるようにする必要があります)

私が得るエラーは

/home/.../zonedisplay.cpp:43: erreur : no matching function for call to 'eventZone::eventZone(eventZone&)'

私の新しいコンストラクターのタイプは次のとおりです。

explicit eventZone(const eventZone &cpy);

これら2つを共存させる方法は?

4

2 に答える 2

3

ここに置く理由はありませんexplicitexplicitの仕事は暗黙の変換を防ぐことですが、変換はしません。コピーするだけです。それを除く。クラス型自体とは異なる型のパラメーターを持つ単一引数のコンストラクターにのみ必要です。

とにかく、C++ の通常のイディオムは (明示的にコピーが必要でない限り) 参照を取ることであり、範囲ベースの for ループにも適用されます。

for(auto const& e : config.zone.values())
  // do whatever with 'e'
于 2012-11-07T18:01:13.793 に答える
0

コピー コンストラクターから明示的に削除する必要があります。または、自動値を参照で渡すことができます...

for (auto &value : コンテナ) ...

于 2012-11-07T17:54:22.720 に答える