2016-04-29 32 views
0

我遇到了这个代码解释对函数C++

#define pii pair<int, int> 
#define pip pair<int, pii> 

... 

vector<pip> graph; 
graph[i] = pip(c, pii(u,v)); 

当我尝试

graph[i] = pair<c,pair<u,v>>; 

我得到一个错误信息

error: 'c' cannot appear in a constant-expression 
error: 'i' cannot appear in a constant-expression 
error: 'j' cannot appear in a constant-expression 

为什么这两个表达式不相等?

+0

什么是'c','i','j','u'和'v'?从'pip(c,pii(u,v))'我可以推断出'c','u'和'v'可能是整数。你想要将它们替换为'pair'的模板参数?为什么你认为将正常括号改为尖括号并不会改变表达式的含义? – lisyarus

+0

是的变量是整数。我试图理解'pip(c,pii(u,v))'是如何工作的,并且认为如果我用'#define'替换括号,它也是一样的。还试用了正常的括号。 – aurel

+0

“以为这是相同的,如果我替换括号,因为#define” - 宏与尖括号无关。 – lisyarus

回答

4

pair类型,不是功能。

除了从语法不正确而,你得到这个错误的原因是因为你试图传递c(运行时可变)进模板参数,在这里:

graph[i] = pair<c,pair<u,v>>; 

想必你想是这样的,而不是:

graph[i] = pip(c, pii(u,v)); 

这相当于:

graph[i] = pair<int, pair<int, int>>(c, pair<int, int>(u,v));