错误C2679二进制'=':找不到哪个运算符采用'int'类型的右手操作数(或者没有可接受的转换)

时间:2017-12-06 23:41:15

标签: c++ visual-studio-2017 directx-12

我正在尝试使用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文件可根据要求提供。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

的T对象