2016-11-15 3 views
1

Können wir paar als Argument für ein anderes Paar in C++ verwenden.Können wir paar eine Vorlage senden argumrent ein anderes Paar

Hier ist ein Testprogramm, das zu tun.

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

Dies ist der Fehler, ich erhalte.

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

Wenn ich das Format der Erklärung und schrieb das Programm in der folgenden Art und Weise,

geändert
#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; 
} 

Es gibt einen zusätzlichen Fehler.

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

Was könnte das Problem sein und wie es zu lösen?


Auf einer Seite zur Kenntnis, habe ich ein Programm, und es in einem sehr alten Dev-C++ Compiler auf einer Windows-7-Maschine zusammengestellt, die einen Code ähnlich die oben verwendet und es lief völlig in Ordnung. Es war ein Laborprogramm in meiner Hochschule, das nur diesen Compiler hatte.

Der obige Code, ich lief auf beiden Windows 7 und Ubuntu 16.04 mit GNU g ++ 5.4.0

Ideone: Link to the actual program for reference

Sie auch einen Blick auf den tatsächlichen Fehler haben könntest, ich in der oben konfrontiert Verknüpfung.

+0

Nachdem ich die Antworten zu sehen, ich sehe der syntaktische Fehler, den ich gemacht habe. Ich kann mich nicht erinnern, wie sehr ich den Code geändert habe. Es scheint viele andere Fehler im verknüpften Code zu geben. –

Antwort

1

Dies ist falsch:

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

Entfernen Sie einfach die extra <>:

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

Auch ich bin nicht sicher, was Sie versuchen im cout Teil zu tun, aber pair keinen [] Operator hat. Sie können die Elemente Zugang mit first und second:

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

Sie auch in std::tuple interessiert sein, wenn Sie Nest ein Paar in eine andere nicht wollen:

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

Es gibt zwei Probleme mit Ihrem Code.

  1. Sie haben ein überflüssiges Paar spitze Klammern in Ihrer Template Instanziierung.
  2. Der cout Parameter macht keinen Sinn

#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

Verwandte Themen