如您所知,.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?
答案 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
)我正在跳过通常的'为什么会有人开发自己的名单?'并且'它看起来更像是一个矢量而不是列表?'。