首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误C2229:类'VectorRemake<T>‘具有非法的零大小数组

错误C2229:类'VectorRemake<T>‘具有非法的零大小数组
EN

Stack Overflow用户
提问于 2010-11-22 04:17:37
回答 3查看 1.1K关注 0票数 0
代码语言:javascript
运行
复制
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;}

    ...
}

我不确定我到底做错了什么。是构造函数导致了问题。

代码语言:javascript
运行
复制
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:语法错误:在'=‘之前缺少';’

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-22 04:20:42

它不是构造器。它是T* list[],它将成员list定义为指向T的指针数组,但没有给出数组的大小。

您可能希望使用T* list;

另请注意,根据,具有析构函数的类还需要一个复制构造函数和一个赋值运算符

使用在析构函数和复制构造函数之上实现赋值运算符。

那么,初始化列表的语法就是错误的。它是

代码语言:javascript
运行
复制
VectorRemake() : capacity(DEFAULT_CAPACITY), count(0) {list = new T[capacity];}
//                                         ^
//                                         comma, not colon

最后,在C++中,类定义后面必须跟一个分号,否则在类定义之后的代码中会出现有趣的错误。

原因是类定义可能是变量定义的一部分:

代码语言:javascript
运行
复制
class foo { ... } bar;

(这将bar定义为foo类型的变量。实际上,甚至可以使用没有名称的类:

代码语言:javascript
运行
复制
class { ... } foobar;

尽管很少这样做。)

编译器需要分号才能知道

代码语言:javascript
运行
复制
class x {}

y yaddayadda ...

是将y定义为x的实例或任何yaddayadda的开头。

票数 2
EN

Stack Overflow用户

发布于 2010-11-22 04:21:14

T* list[];是指针数组(如果是动态分配,则是数组数组)。并且您不能使用开放数组作为属性。

您很可能想要T* list;

票数 3
EN

Stack Overflow用户

发布于 2010-11-22 04:19:51

list的声明应为T* list;。您当前的声明说您需要一个指向T的无大小的指针数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4240111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档