代码之家  ›  专栏  ›  技术社区  ›  soulia

错误C2679:二进制“=”:找不到接受“std::vector<\Ty>*”类型的右操作数的运算符(或没有可接受的转换)

  •  2
  • soulia  · 技术社区  · 14 年前

    当我建立一个图表时,我得到了以下信息。

    #include <vector>
    using namespace std;
    
    template<class T>
    class Node
    {
    private:
      T data;
      Node<T> *link;
      vector<T>  neighbors;
    public:
      Node(){neighbors = new vector<T>();};
    };
    
    int main()
    {
      Node<int> n;
      return 0;
    }
    

    ... 返回错误C2679:二进制“=”:找不到运算符。。。

    我在用VS2010。发生了什么? 谢谢!

    2 回复  |  直到 14 年前
        1
  •  8
  •   Charles Salvia    14 年前

    这个 new 运算符返回 指针 类型,但您的成员变量 neighbors 不是指针。所以你要分配一个指针 新的 )指向非指针类型。你的 邻居 变量必须是指针: vector<T>* neighbors .

    但我想你可能误解了 新的 在这里。你可能根本不应该使用向量指针。把线去掉 neighbors = new vector<T>() . 矢量对象将自动初始化并准备使用。

    在C++中 新的 关键字分配并初始化堆上的对象,然后必须在以后使用 delete . 最好避免 新的 关键字,只需将对象初始化为自动变量,例如:

    vector<T> neighbors;

    这样,您就不必担心内存管理,当vector对象超出范围时,它将自动被销毁。

        2
  •  1
  •   Armen Tsirunyan    14 年前
    vector<T>  neighbors;
    neighbors = new vector<T>();
    

    邻居不是指针。

    使用向量的整个目的不是显式地管理内存。 实际上,在节点构造函数中,邻居是默认初始化的,所以不要初始化。您的构造函数可能如下所示:

    Node(){}
    

    所以你可以省略:)