0

我正在尝试在 C++ 中创建一个陷阱类。我有这个类的 .h 和 .cpp 文件,以及一个测试类。当我尝试构建它时,我的 'add' 方法给了我以下错误:“错误 C2678:二进制 '<=>':未找到采用 'E' 类型的左操作数的运算符(或者没有可接受的转换)"

这是我的代码:

处理.h

#pragma once
#include <compare>
#include <string>
#include <random>
#include <stack>

template<class E>
class Treap
{
public:
    class Node {
    public:
        // data fields
        E data; // key for the search
        int priority; // random heap priority
        Node* left;
        Node* right;

        // omitted constructor for brevity


        // omitted rotation methods for brevity
    };

private:
    // data fields
    Node* root;

    // methods

    // omitted reheap method for brevity

public:
    // omitted constructors for brevity

    // omitted methods for brevity
};

treap.cpp

#include "Treap.h"

template<class E>
bool Treap<E>::add(E& key, int priority) {
    Node* newNode = new Node(key, priority);
    if (root == nullptr) {
        root = newNode;
        return true;
    }
    else {
        // if key is found in tree, return false

        std::stack<Node*> nodeStack;
        Node* current = root;
        Node* prev = nullptr;
        auto n = current->data <=> key;
        nodeStack.push(current);
        while (n != 0 && current != nullptr) {
            prev = current;
            if (n > 0)
                current = current->left;
            else
                current = current->right;

            if (current == nullptr)
                break;

            nodeStack.push(current);
            n = current->data <=> key;
        }
        if (n > 0)
            prev->left = newNode;
        else
            prev->right = newNode;

        // omitted method that reheaps the treap
    }
    return true;
}

TreapTest.cpp

#include "pch.h"
#include "CppUnitTest.h"
#include "../Treap.cpp"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace TreapTest {
    TEST_CLASS(TreapTest) {
    public:
        TEST_METHOD(addTest) {
            Treap<std::string> test;
            Assert::IsTrue(test.add(std::string("p"), 99)); // this seems to be the line causing the issue
        }
    };
}

导致错误的行是第 13 行和第 26 行(也就是飞船操作员的行)。我使用的是 VS 2019,C++ 语言标准是 C++20。PS:我是 C++ 的新手。我正在将现有的 Java 代码转换为 C++,作为理解和学习 C++ 的练习。

编辑:好的,我做了一些@cdhowie 和@interjay 建议的更改。但是这些建议都没有帮助解决这个特定问题(我有点预料到,因为代码编译时没有解决方案中的测试文件,这意味着尽管我犯了愚蠢的错误,但原始代码编译得很好)。

另外,@Barry,我希望这些更新更适合该标准。

4

0 回答 0