2016-04-29 46 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));