9

Qt を使用して、このコードを機能させたい:

QList<QPair<QString, QString>> list;
foreach (QPair<QString, QString> pair, list)
{
}

代わりに、次のエラーが表示されます。

「ペア」: 宣言されていない識別子

を使用しtypedefて動作させることができますが、これは私が望むものではありません (これが動作する唯一のものでない限り):

typedef QPair<QString, QString> MyPair;
QList<MyPair> list;
foreach (MyPair pair, list)
{
}

最初の foreach がコンパイルされない理由を誰か説明できますか?

4

3 に答える 3

14

foreach エラーではありません。宣言ミスです。次のようにリストを宣言しました。

QList<QPair<QString, QString>> list;

このようにする必要がありますが:

QList<QPair<QString, QString> > list;

ループの外側で QPair を宣言するだけです:

QPair<QString,QString> pair;
foreach(pair,list){

}
于 2013-04-19T12:27:27.690 に答える
11

複数のテンプレート パラメーターを含む qt foreach ステートメント内でテンプレート クラスを使用することはできません。これは、コンマ区切りがマクロ内のコンマ区切りと競合するためです。

#define add( a, b ) (a + b)

template < typename T1, typename T2 >
struct DATA
{
  static const T1 val1 = 1;
  static const T2 val2 = 2;
};

// Usage
const int c = add( 1, 2 ); // OK
const int d = add( DATA< int, int >::val1 , DATA< int, int >::val2 ); // FAIL

マクロ add は "DATA< int" を最初の引数として解釈し、" int >::val1" を 2 番目の引数として解釈するためです。

于 2013-04-19T12:39:53.317 に答える