【发布时间】:2010-11-21 20:17:37
【问题描述】:
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 个错误 @T[i] = 0; (第 6 行)。
我正在尝试将其设置为 NULL,但我的导师告诉我 NULL 不是 c++ 标准,我应该怎么做?
警告 1 警告 C4091: '' : 当没有声明变量时,'double' 左侧被忽略 3\solution11-3\solution11-3.cpp 46
错误 2 错误 C2143:语法错误:缺少 ';'在'['之前
错误 3 错误 C2337:“i”:找不到属性
错误 4 错误 C2143:语法错误:缺少 ';'在'='之前
【问题讨论】:
-
在初始化列表中初始化
list。 -
好的,我通过将其更改为 T* 列表将其减少为一个错误;我还将第二个构造函数更改为: VectorRemake(int capacity) :capacity(capacity), :count(0), :list(new T[capacity]) {} 我现在收到错误:C2059:语法错误:': '
-
删除除第一个冒号以外的所有内容。
-
@GMan: NO! 这会爆炸(希望 - 可能会发生更糟糕的事情),因为成员按照它们在类定义中声明的顺序进行初始化,这在这种情况下是不合适的(而且通常很脆弱)。
-
cable,不要通过
list[i] = 0;破坏数组中的元素。你不知道T可能是什么,它是否可以用0进行初始化,如果这不会在你的脸上爆发。 (它适用于std::string。)您可以使用T()语法默认构造一个对象。std::vector做得更好,它分配原始存储并就地构造/销毁对象,但是一旦你掌握了这个阶段,就把它作为优化。