2012-03-25 104 views
0

這是我自己實現了一個堆(用於算法競賽)。還有一些我無法收回編譯錯誤......無效使用非靜態數據成員的

\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 2012-03-25 19:51:24

+1

我只是試圖使該行粗體,我發現它不起作用...> _ < – Sayakiss 2012-03-25 19:53:58

回答

8

這只是說您不能在成員變量上創建默認參數。考慮使用過載代替:

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

它是否在標準中明確提到「你不能在默認參數基礎上的成員變量? – 2012-03-25 19:56:12

+0

@Mr .TAMER:我不知道。 – 2012-03-25 19:59:20

+0

哇..很酷..它只是避開了這個問題......(我不是一個英語母語的人......如果我誤解了我的英語可憐) – Sayakiss 2012-03-25 19:59:24

相關問題