template <class T>
class VectorRemake
{
private:
T* list[];
int count;
int capacity;
public:
VectorRemake() :capacity(DEFAULT_CAPACITY) :count(0) {list = new T[capacity];}
VectorRemake(int capacity) :capacity(capacity) :count(0) {list = new T[capacity];}
~VectorRemake() {delete [] list;}
...
}
我不确定我到底做错了什么。是构造函数导致了问题。
void resize(int size, T t=T())
{
if (size < capacity)
{
for (int i = size; i < capacity; i++)
T[i] = 0;
count = size;
}
else if(size > capacity)
{
T *newlist = new T[size];
for (int i = 0; i < count; i++) newlist[i] = list[i];
for (int i = count; i < size; i++) newlist[i] = t;
delete [] list;
list = newlist;
}
else return;
capacity = size;
}
我收到4个错误@Ti = 0;(第6行)。
我试图将其设置为NULL,但我的讲师告诉我,NULL不是c++标准,我该怎么办?
警告1警告C4091:'‘:在未声明变量的情况下忽略'double’的左侧3\解决方案11-3\解决方案11-3.cpp 46错误2错误C2143:语法错误:缺少';‘之前的'[’
错误3错误C2337:'i‘:找不到属性
错误4错误C2143:语法错误:在'=‘之前缺少';’
发布于 2010-11-22 04:20:42
它不是构造器。它是T* list[]
,它将成员list
定义为指向T
的指针数组,但没有给出数组的大小。
您可能希望使用T* list;
。
另请注意,根据,具有析构函数的类还需要一个复制构造函数和一个赋值运算符。
使用在析构函数和复制构造函数之上实现赋值运算符。
那么,初始化列表的语法就是错误的。它是
VectorRemake() : capacity(DEFAULT_CAPACITY), count(0) {list = new T[capacity];}
// ^
// comma, not colon
最后,在C++中,类定义后面必须跟一个分号,否则在类定义之后的代码中会出现有趣的错误。
原因是类定义可能是变量定义的一部分:
class foo { ... } bar;
(这将bar
定义为foo
类型的变量。实际上,甚至可以使用没有名称的类:
class { ... } foobar;
尽管很少这样做。)
编译器需要分号才能知道
class x {}
y yaddayadda ...
是将y
定义为x
的实例或任何yaddayadda
的开头。
发布于 2010-11-22 04:21:14
T* list[];
是指针数组(如果是动态分配,则是数组数组)。并且您不能使用开放数组作为属性。
您很可能想要T* list;
发布于 2010-11-22 04:19:51
list
的声明应为T* list;
。您当前的声明说您需要一个指向T
的无大小的指针数组。
https://stackoverflow.com/questions/4240111
复制相似问题