gpt4 book ai didi

c++ - C2678 : error on insertion of Binary search tree c++

转载 作者:行者123 更新时间:2023-11-28 05:35:14 25 4
gpt4 key购买 nike

使用 visual studio 2015 进行 C++ 实现我在 insertHelper() 中收到编译错误.

Insert Helper 是下面列出的递归函数。

    template < typename DataType, typename KeyType >
void BSTree<DataType, KeyType>::insertHelper(BSTreeNode *&p,
const DataType &newDataItem)

// Recursive helper function for insert. Inserts newDataItem in
// the subtree pointed to by p.

{
if (p == NULL) {
p->dataItem = newDataItem;
p->left = NULL;
p->right = NULL;
}
else {
if (p->dataItem < newDataItem) { // <- error triggers here
insertHelper(p->left, newDataItem);
}
else {
insertHelper(p->right, newDataItem);
}
}
}

Insert Helper 在这里被insert调用:

 template < typename DataType, typename KeyType >
void BSTree<DataType, KeyType>::insert(const DataType &newDataItem)

// Inserts newDataItem into a tree. If an data item with the same key
// as newDataItem already exists in the tree, then updates that
// data item's data with newDataItem's data.

{
insertHelper(root, newDataItem);
}

这里是我的树头文件的简化版本。

#ifndef BSTREE_H
#define BSTREE_H
#include <stdexcept>
#include <iostream>
using namespace std;

template < typename DataType, class KeyType > // DataType : tree data item
class BSTree // KeyType : key field
{
public:

// Constructor
BSTree(); // Default constructor
// Binary search tree manipulation operations
void insert(const DataType& newDataItem); // Insert data item
protected:
class BSTreeNode // Inner class: facilitator for the BSTree class
{
public:

// Constructor
BSTreeNode(const DataType &nodeDataItem, BSTreeNode *leftPtr, BSTreeNode *rightPtr);

// Data members
DataType dataItem; // Binary search tree data item
BSTreeNode *left, // Pointer to the left child
*right; // Pointer to the right child
};

// Recursive helpers for the public member functions -- insert
// prototypes of these functions here.
void insertHelper(BSTreeNode *&p, const DataType &newDataItem);

// Data member
BSTreeNode *root; // Pointer to the root node
};

#endif // define BSTREE_H

测试数据和初始化:

class TestData
{
public:

void setKey ( int newKey )
{ keyField = newKey; } // Set the key

int getKey () const
{ return keyField; } // Returns the key

private:

int keyField; // Key for the data item
};

int main()
{
BSTree<TestData,int> testTree; // Test binary search tree
TestData testData; // Binary search tree data item
}

我不明白为什么我不能使用if (p->dataItem < newDataItem){} .我试过了 if (p.dataItem < newDataItem){}甚至只是if (dataItem < newDataItem){} .而且这个错误让我无处可去。任何帮助,将不胜感激。

错误是:

C2678 : binary '<': no operator found which takes a left-hand BST operand of type 'TestData' (or there is no acceptable conversion).

最佳答案

if (p->dataItem < newDataItem) { // <- error triggers here

基于

BSTree<TestData,int> testTree;

我们知道p->dataItemnewDataItem类型为 TestData .

所以上面的比较扩展为

if (p->dataItem.operator<(newDataItem))

现在让我们再看看错误信息:

binary '<': no operator found which takes a left-hand BST operand of type 'TestData' (or there is no acceptable conversion).

它正在寻找二元“<”运算符。您还没有提供,因此该语言无法实现您请求的 <比较。

class TestData
{
public:

void setKey ( int newKey )
{ keyField = newKey; } // Set the key

int getKey () const
{ return keyField; } // Returns the key

bool operator < (const TestData& rhs) const
{ return keyField < rhs.keyField; }

private:

int keyField; // Key for the data item
};

class TestData
{
public:

void setKey ( int newKey )
{ keyField = newKey; } // Set the key

int getKey () const
{ return keyField; } // Returns the key

friend bool operator < (const TestData&, const TestData&);

private:

int keyField; // Key for the data item
};

bool operator < (const TestData& lhs, const TestData& rhs)
{
return lhs.keyField < rhs.keyField;
}

现场演示:http://ideone.com/Y7JGCD

关于c++ - C2678 : error on insertion of Binary search tree c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38471135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com