2010-11-10 45 views
0

正如您所知,.NET框架中存在一個泛型類List。 我想在C++中編寫一個泛型類List,我想將指針存儲在我的列表中。這是類和測試程序的標題和源代碼:C++中的指針指針(AnyType ** var)存在問題

// header 
template <class Type> 
class List 
{ 
public: 
    List(int size); // constructor 
    . 
    . 
    . // other public members 
private: 
    Type **list; // a dynamic array of pointer to Type 
    . 
    . 
    . // other private members 
}; 

// source code 
template <class Type> List<Type>::List(int size) // constructor 
{ 
    this->list = new Type[size]; 
    . 
    . // other parts of definition 
} 

// main function 
void main() 
{ 
    List<AnyType> mylist = new List<AnyType>(4); 
    mylist[0] = new AnyType(// any arguments); 
} 

它不起作用propertyly。問題在哪裏?是否有可能使用這個類的Structs?

+0

應該是。但是,您需要告訴我們您的期望以及發生了什麼 – 2010-11-10 08:25:21

+0

不,「指向類型的指針的動態數組」將是「std :: vector '。 – avakar 2010-11-10 08:26:48

回答

2

this->list = new Type[size];應該this->list = new Type*[size];

編輯:沒有,它實際上編譯?該作業至少應該生成警告。

+0

我收到一個錯誤 – 2010-11-10 08:37:45

+0

@Hesam那麼問題應該是「這個代碼有什麼問題」,但是「這個錯誤是什麼意思」:) – 2010-11-10 08:39:35

0

變化

new Type[size]; 

到:

new Type*[size]; 

你想要的指針數組不是Type

陣列同樣有什麼錯std::vector<Type*>

+0

std :: vector有什麼問題> ? :P – 2010-11-10 09:12:54

0

myList不是一個數組,它包含一個數組。因此,無論類型是否需要[]類型操作符(不確定C++中是否可能)或者允許設置this-> list [n] =某件事的方法。

呈三角此:

template <class Type> List<Type>::SetItem(int itemNumber, Type theItem) 
{ 
    this->list[itemNum] = theItem; 
} 

,然後調用

myList.SetItem(0, new AnyType(...)); 
+0

但我想存儲一個指向鍵入mylist的指針。 – 2010-11-10 08:46:30

1

我看到至少有兩個問題:

  • 如果你想指針數組分配給Type對象您必須用new Type*[size];替代new Type[size];
  • mylist[0] = new AnyType(/* ... */),你必須重載operator []在類

在一般情況下,C++有一個已經包含泛型列表(std::list)和數組(std::vector)的implemenentations一個相當不錯的標準模板庫使用此語法。 例如見this reference

0

有幾個問題在你的代碼:

  • this->list = new Type[size];分配的Type一個數組,不是的Type *數組:你可能想改變這new Type*[size]
  • 的代碼List<AnyType> mylist = new List<AnyType>(4);將不會編譯。無論是使用List<AnyType> mylist(4);List<AnyType> *mylist = new List<AnyType>(4);
  • 我看到你在源文件中分離的實現(這將在退出程序之前需要額外的delete):我建議你閱讀this item

我跳過平時的「爲什麼有人會制定他自己的名單?'和'它看起來更像是一個矢量而不是一個列表?'。