2016-11-15 95 views
1

我們可以在C++中使用pair作爲參數嗎?我們可以發送一個模板參數嗎?另一對

這是一個測試程序來做到這一點。

#include <iostream> 
#include <utility> 

int main() 
{ 
    std::pair<int,int> m; 
    m=std::make_pair(1,3); 
    int r = 3; 
    int *q = &r; 
    int **p =&q; 
    int **t = p; 
    std::pair<int**,<std::pair<int,int> > > i(p,m); 
    std::cout<<i[t]; 

    return 0; 
} 

這是錯誤,我越來越。

Test.cpp: In function ‘int main()’: 
Test.cpp:12:45: error: template argument 2 is invalid 
    std::pair<int**,<std::pair<int,int>>> i(p,m); 
              ^

如果我改變聲明的格式,並通過以下方式編寫的程序,

#include <iostream> 
#include <utility> 

int main() 
{ 
    std::pair<int,int> m; 
    m=std::make_pair(1,3); 
    int r = 3; 
    int *q = &r; 
    int **p =&q; 
    int **t = p; 
    std::pair< 
       int**, 
       < 
        std::pair< 
           int, 
           int 
           > 
          > 
         > i(p,m); 
    std::cout<<i[t]; 

    return 0; 
} 

另外還有一個錯誤。

Test.cpp: In function ‘int main()’: 
Test.cpp:20:7: error: template argument 2 is invalid 
     > i(p,m); 
    ^
Test.cpp:20:14: error: expression list treated as compound expression in initializer [-fpermissive] 
     > i(p,m); 

什麼可能是這個問題,以及如何解決它?


在一個側面說明,我做了一個方案,並在很老的開發-C++編譯器編譯它在Windows 7機,它採用了類似上述代碼和它運行完美的罰款。這是我大學裏只有那個編譯器的實驗程序。

上面的代碼,我跑了使用GNU G ++ 5.4.0

Ideone兩個窗口7和Ubuntu 16.04:Link to the actual program for reference

您也可以看看實際的錯誤,我面臨的上述鏈接。

+0

看到答案後,我看到我犯的語法錯誤。我不記得我改了多少代碼。代碼鏈接中似乎還有很多其他錯誤。 –

回答

1

這是不正確的:

std::pair<int**,<std::pair<int,int> > > i(p,m); 

只需刪除多餘的<>

std::pair<int**, std::pair<int,int > > i(p,m); 

此外,我不確定您要在cout部分中做什麼,但pair沒有[]運算符。你可以用firstsecond訪問的元素:

i.first 
i.second 
i.second.first 
i.second.second 

您還可能有興趣在std::tuple,如果你不想窩一對到另一個:

std::tuple<int**, int, int> i; 
1

您的代碼有兩個問題。

  1. 在模板實例化中有一對多餘的尖括號。
  2. cout參數是沒有意義的

#include <iostream> 
#include <utility> 

int main() 
{ 
    std::pair<int,int> m; 
    m=std::make_pair(1,3); 
    int r = 3; 
    int *q = &r; 
    int **p =&q; 
    int **t = p; 
    std::pair< 
       int**, 
       // < Omit this 
        std::pair< 
           int, 
           int 
           > 
          // > also this 
         > i(p,m); 
    // std::cout<<i.[t]; indexing with a pointer value doesn't make sense 
    // i. for a pair doesn't make sense, specify either first or second 
    std::cout<<i.first[0]; // <<<< Did you mean something like this? 

    return 0; 
} 

Check the compiling version live

相關問題