2012-03-25 9 views
0

Es ist ein Haufen von mir umgesetzt (für Algorithmus Wettbewerb) .Es einige Übersetzungsfehler sind, die ich von nicht mehr erholen kann ...Ungültige Verwendung von nicht-statischen Daten Mitglied

\Map_Heap.cpp|13|error: invalid use of non-static data member 'MapHeap<DT>::nv'| 
\Map_Heap.cpp|19|error: from this location| 

Code:

#include<cstdio> 
#include<cstring> 
const int HEAP_SIZE=10005; 
template<class DT> 
struct MapHeap 
{ 
    DT f[HEAP_SIZE+5]; 
    int mp1[HEAP_SIZE+5];//val -> index 
    int mp2[HEAP_SIZE+5];//index -> val 
    int nv;///line 13 
    MapHeap():nv(0) 
    { 
     memset(mp1,-1,sizeof(mp1)); 
     memset(mp2,-1,sizeof(mp2)); 
    } 
    void print(int n=nv)//line 19 
    { 
     for(int i=1;i<=n;i++) printf("%d ",f[i]); 
     puts(""); 
     for(int i=1;i<=n;i++) printf("%d ",mp1[i]); 
     puts(""); 
     for(int i=1;i<=n;i++) printf("%d ",mp2[i]); 
     puts(""); 
    } 
}; 
+0

Es gibt einige lustige '**' s an der Front. Sind diese Teile des Codes, oder haben Sie versucht, diese Zeile fett zu machen? Weil das im Code nicht funktioniert. – Thomas

+1

Ich habe gerade versucht, diese Zeile fett und ich fand es nicht funktioniert ...> _ < – Sayakiss

Antwort

8

Es ist einfach gesagt, dass Sie nicht ein Standardargument auf eine Membervariable basieren können. Verwenden Sie stattdessen Überladungen:

void print() { print(nv); } 
void print(int n) { 
    ... 
} 
+2

Ist es explizit in den Standards erwähnt, dass "Sie können nicht ein Standardargument auf eine Elementvariable basieren? –

+0

@Mr .TAMER: Ich habe keine Ahnung. –

+0

wow..Es ist cool .. Es ist nur vermeiden, das Problem ... (Ich bin kein englischer Muttersprachler ... sorry für mein schlechtes Englisch, wenn ich irgendein Missverständnis mache) – Sayakiss

Verwandte Themen