使用Qt,我想要这个代码工作:
QList<QPair<QString, QString>> list;
foreach (QPair<QString, QString> pair, list)
{
}
Run Code Online (Sandbox Code Playgroud)
相反,我得到错误:
'pair':未声明的标识符
使用typedef我可以使它工作,但这不是我想要的(除非这是唯一有效的):
typedef QPair<QString, QString> MyPair;
QList<MyPair> list;
foreach (MyPair pair, list)
{
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么第一个foreach不编译?
Shf*_*Shf 12
这不是foreach错误.这是声明错误.你声明了这样的列表:
QList<QPair<QString, QString>> list;
Run Code Online (Sandbox Code Playgroud)
虽然它应该这样:
QList<QPair<QString, QString> > list;
Run Code Online (Sandbox Code Playgroud)
只需在循环外声明QPair:
QPair<QString,QString> pair;
foreach(pair,list){
}
Run Code Online (Sandbox Code Playgroud)
Dmi*_*nov 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
Run Code Online (Sandbox Code Playgroud)
因为宏添加会将"DATA <int"解释为第一个参数,将"int> :: val1"解释为第二个,依此类推.
| 归档时间: |
|
| 查看次数: |
5722 次 |
| 最近记录: |