-4

我正在尝试使用 DirectX 12 在 C++ 中创建一个动态数组。我在这里找到了一个很好的数组,做了一些矿工更改,因为它是为 DirectX 11 创建的。

运行时出现此错误。

严重性代码 描述 项目文件行抑制状态

错误 C2679 二进制“=”:未找到采用“int”类型右侧操作数的运算符(或没有可接受的转换)

这是它说有问题的代码。

    Vector(int a)
{
  size = a;
  obj = new T[size];
  for(int i = 0 ; i<size; i++)
  {
    obj[i] = NULL;
  }
}

这是完整的标题。

#include<iostream>
using namespace std;
template <class T>
class Vector
{
private:
    int size,capacity;
    T *obj;
public:
    Vector()
    {
        size = capacity = 0;
        obj = NULL;
    }
    ~Vector()
    {
        delete [] obj;
    }
    Vector(int a)
    {
        size = a;
        obj = new T[size];
        for(int i = 0 ; i<size; i++)
        {
            obj[i] = NULL;
        }
    }
    int size_of_list();
    bool empty();
    void reserve(int);
    T& operator[](int);
    T at(int);
    T front();
    T back();
    void push_back(T element);
    void pop_back();
    void insert(int,T);
    void erase(int);
};

.cpp 文件可应要求提供。

4

2 回答 2

1

您正在编写 java 或 C#,而不是那里的 c++。C++ 具有值语义。对象通常不能设置为 NULL(这只是一个零值的宏)。通常也不需要,因为你有一个适当的值:T{},默认构造的对象

于 2017-12-06T23:46:29.673 回答
0

看起来问题在于您假设 obj[i] 是指向类型 T 的指针,但它实际上是类型 T 的对象。 obj 是指向第一个分配的 T 对象的指针,obj[i] 它是T 对象在地址 obj + i*sizeof(T)

于 2017-12-06T23:48:53.267 回答