2012-04-01 11 views
0

Alles, was ich versuche zu tun, ist eine Reihe von Paaren gegeben eine Beziehung gegeben. Ich halte die folgende Fehlermeldung von der Linie 208 in der Datei xmemory bekommen:Sätze und Xmemory in C++

Fehler C2664: 'std :: pair < _Ty1, _Ty2> :: Paar (std :: pair < _Ty1, _Ty2> &)' : kann den Parameter 1 von 'Std :: Paar < _Ty1, _Ty2>' zu nicht konvertieren 'Std :: Paar < _Ty1, _Ty2> &' c: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ vc \ include \ xmemory 208

Ich bin mir nicht sicher warum, hier ist mein Code:

void print_relation(const set<pair<int, int>> R); 
set<pair<int, int>> init_relation(const int A[], const int size); 

void main() 
{ 
    int A[] = {1, 4, 5, 7, 8, 13, 18, 22, 39}; 
    const int size = 9; 

    set<pair<int, int>> R = init_relation(A, size); 
    print_relation(R); 

    system("pause"); 
} 

void print_relation(const set<pair<int, int>> R) 
{ 
    set<pair<int, int>>::iterator Rit = R.begin(); 

    cout << "Relation R:" << endl << endl; 

    for(int i = 0; Rit != R.end(); Rit++, i++) 
    { 
     printf("%d: (%d, %d)\n", i, (*Rit).first, (*Rit).second); 
    } 
} 

set<pair<int, int>> init_relation(const int A[], const int size) 
{ 
    set<pair<int, int>> R; 

    for(int i = 0; i < size - 1; i++) 
    { 
     for(int j = 0; j < size - 1; j++) 
     { 
       if((A[i] - A[j]) % 7 == 0) 
      { 
        R.insert(new pair<int, int>(i, j)); 
      } 
     } 
    } 

    return R; 
} 
+0

Sagen Sie uns, welche Zeile Ihres Codes betroffen ist. –

Antwort

4

Fehler ist hier

R.insert(new pair<int, int>(i, j)); 

Sie fügen sollte Paar nicht paaren Zeiger.

R.insert(pair<int, int>(i, j)); 
+0

Danke! Kannst du mir auch sagen, warum es kein Zeiger sein kann? – CodeKingPlusPlus

+0

Weil Sie erklärt haben, dass Ihr Set Paare enthält. Wenn Sie es als *> festlegen, können Sie Zeiger einfügen. –

+0

Da Ihre Sammlung Paare speichert, keine Zeiger auf Paare. –