ошибка C2679: двоичный файл '=': не найден оператор, который принимает правый операнд типа 'std :: vector <_Ty> *' (или нет приемлемого преобразования) - PullRequest
2 голосов
/ 17 ноября 2010

Я получил следующее при построении графика.

#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 ]

8 голосов
/ 17 ноября 2010

Оператор new возвращает тип указателя , но ваша переменная-член neighbors не является указателем. Итак, вы присваиваете указатель (результат new) типу без указателя. Ваша переменная neighbors должна быть указателем: vector<T>* neighbors.

Но я думаю, что вы, вероятно, неправильно понимаете использование new здесь. Вы, вероятно, даже не должны использовать векторный указатель. Просто удалите строку neighbors = new vector<T>(). Векторный объект будет автоматически инициализирован и готов к использованию.

В C ++ ключевое слово new выделяет и инициализирует объекты в куче, которые затем должны быть освобождены позже с помощью delete. Желательно избегать ключевого слова new, просто инициализируя объект как автоматическую переменную, например:

vector<T> neighbors;

Таким образом, вам не нужно беспокоиться об управлении памятью, и векторный объект будет автоматически уничтожен, когда он выйдет из области видимости.

1 голос
/ 17 ноября 2010
vector<T>  neighbors;
neighbors = new vector<T>();

соседей не указатель.

Весь смысл использования векторов заключается не в явном управлении памятью.На самом деле в вашем конструкторе узлов соседние объекты инициализируются по умолчанию, поэтому просто не инициализируйте.Ваш конструктор может выглядеть так:

Node(){}

Так что вы можете просто опустить его:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...