2016-11-15 4 views
1

Можно ли использовать пару в качестве аргумента для другой пары в C++.Можем ли мы отправить пару шаблона argumrent другой пары

Вот тестовая программа для этого.

#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); 

Какая проблема и как ее решить?


На стороне записки, я сделал программу и скомпилировал его в очень старой Dev-C++ компилятор на под управлением Windows 7 машин, которые использовали код, аналогичный приведенному выше, и он побежал прекрасно. Это была лабораторная программа в моем колледже, в которой был только тот компилятор.

Приведенный выше код, я побежал на оба окна 7 и Ubuntu 16.04 с использованием GNU г ++ 5.4.0

Ideone: 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 не имеет [] оператора. Вы можете получить доступ к элементам с first и second:

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

Смежные вопросы