2012-03-25 2 views
0

Это Heap реализуется сам (на конкурс алгоритма) .Есть некоторые ошибки компиляции, которые я не могу оправиться от ...Неправильное использование нестатической элемента данных

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

Код:

#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

На передней панели есть несколько смешных '**'. Являются ли эти части кода, или вы пытались сделать эту строку жирным? Потому что это не будет работать в коде. – Thomas

+1

Я просто пытался сделать эту строку смелой, и я нашел, что это не сработало ...> _ < – Sayakiss

ответ

8

Это просто говорит, что вы не можете использовать аргумент по умолчанию для переменной-члена. Вместо этого используйте вместо этого перегрузки:

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

Является ли это явным образом в Стандартах, что «вы не можете использовать аргумент по умолчанию для переменной-члена? –

+0

@Mr .TAMER: Я понятия не имею. –

+0

wow..It's cool .. Это просто избавиться от проблемы ... (Я не носитель английского языка ... извините за моего бедного английского, если я ошибаюсь) – Sayakiss

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