C ++中指向指针(AnyType ** var)的问题

时间:2010-11-10 08:21:42

标签: c++ data-structures

如您所知,.NET框架中有一个泛型类List。 我想用C ++编写一个泛型类List,我想存储指向列表中类型的指针。这是类和测试程序的头和源代码:

// 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);
}

它不起作用。哪里有问题?是否可以将此类用于Structs?

5 个答案:

答案 0 :(得分:2)

this->list = new Type[size];应为this->list = new Type*[size];

编辑:它真的编译了吗?作业至少应该产生警告。

答案 1 :(得分:1)

我至少看到两个问题:

  • 如果要分配指向Type个对象的指针数组,则必须将new Type[size];替换为new Type*[size];
  • 要使用此语法mylist[0] = new AnyType(/* ... */),您必须在类中重载operator []

通常,C ++有一个非常好的标准模板库,它已经包含通用列表(std::list)和数组(std::vector)的实现。 例如,请参阅this reference

答案 2 :(得分:0)

更改

new Type[size];

为:

new Type*[size];

你想要一个指针数组而不是Type

的数组

std::vector<Type*>还有什么问题?

答案 3 :(得分:0)

myList不是数组,它包含一个数组。所以要么类型需要[]类型操作符(不确定是否可以在C ++中)或者允许你设置 this-&gt; list [n] =有些东西。

Simillar对此:

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

然后致电

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

答案 4 :(得分: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

我正在跳过通常的'为什么会有人开发自己的名单?'并且'它看起来更像是一个矢量而不是列表?'。