нет совпадения с оператором = в

Я шаблонный класс BSTNode,

BSTNode.h

#ifndef _NODE_BST_H_
#define _NODE_BST_H_

template <class K, class T>
struct BSTNode
{
typedef K keyType;
typedef T elementType;

keyType _key;
elementType _element;

BSTNode<keyType,elementType>* _leftChild;
BSTNode<keyType,elementType>* _rightChild;// constructors
BSTNode();
BSTNode<K,T>::BSTNode (keyType, elementType, unsigned int, BSTNode<K,T>*, BSTNode<K,T>*);

/*
some methods
*/

BSTNode<K,T>& operator=(const BSTNode<K,T>& nodoBST2);
};

template <class K, class T>
BSTNode<K,T>::BSTNode ()
{
_leftChild=NULL;
_rightChild=NULL;

}template <class K, class T>
BSTNode<K,T>::BSTNode (keyType chiave, elementType elemento, unsigned int altezza, BSTNode* figlioSinistro=NULL, BSTNode* figlioDestro=NULL)
{

//constuctor code
}template <class K, class T>
BSTNode<K,T>& BSTNode<K,T>::operator=(const BSTNode<K,T>& nodoBST2)
{

//operator= code

return *this;
}
#endif

main.c

#include <cstdlib>
#include <iostream>

#include "BSTnode.h"using namespace std;

int main(int argc, char *argv[])
{
BSTNode<string,string>* node1,node2;

node1=NULL;
node2=node1;

system("PAUSE");
return EXIT_SUCCESS;
}

Я получаю ошибку

no match for 'operator=' in 'node2 = node1'
candidates are: BSTNode<K, T>& BSTNode<K, T>::operator=(const BSTNode<K, T>&) [with K = std::string, T = std::string]

даже если у меня есть оператор = в классе BSTNode, соответствующий требуемой подписи.

Более того, являясь node1, node2 указывает на класс BSTNode, из своего опыта я знаю, что на самом деле мне даже не нужен operator =.

В чем может быть проблема? Может кто-нибудь, пожалуйста, взглянуть и помочь мне?

Спасибо заранее за ваше время.

0

Решение

BSTNode<string,string>* node1,node2;

… анализируется как

BSTNode<string,string>* node1;
BSTNode<string,string> node2;

… поскольку * привязывается к узлу 1, а не к имени типа.

То, что вы хотели написать, это либо

BSTNode<string,string>* node1, *node2;

или же

BSTNode<string,string>* node1;
BSTNode<string,string>* node2;

Последнее, очевидно, лучше, потому что оно не позволяет вам делать такие ошибки в будущем :).

Указатели не зависят от = оператор, и вам не нужно определение, если вы не хотите назначать необработанные объекты.

2

Другие решения

Знаете ли вы, что

BSTNode<string,string>* node1,node2;

эквивалентно

BSTNode<string,string>* node1;
BSTNode<string,string> node2;

?

Если вы знаете, то правильный формат для operator= должно быть

 node2 = *node1; // where node1 != NULL;
// Otherwise it should still compile but it leads to segmentation fault during run-time.

Если вы просто хотите скопировать указатель, все, что вам нужно сделать, это:

BSTNode<string,string>* node1;
BSTNode<string,string>* node2;
node2 = node1;
1

По вопросам рекламы [email protected]