【问题标题】:How do I make a unique pointer that takes a class that takes a type? (Generic) It doesn't let me it如何制作一个唯一指针,该指针接受一个类型的类? (通用)它不允许我这样做
【发布时间】:2018-02-11 04:20:04
【问题描述】:

我正在为我的通用二进制搜索树创建我的节点类,并且我的 BSTNode 类和 BSTree 类有一个唯一的指针根节点,它采用 T 的 BSTNode。
每当我制作指针时,它都会显示这些错误
• "';' 前面的非预期标记"

• "语法错误:缺少';' before '
• "缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int"

如何使用 T 的节点类创建唯一指针?顺便说一句,我正在 Visual Studios 2017 中对此进行编码。

二叉搜索树头文件:

#include "BSTNode.h"

template <typename T>
class BST
{
public:
    BST();
    shared_ptr<BSTNode<T>> Root;
    void Insert(T newValue);
    void Delete(BSTNode<T> deleteNode);
    BSTNode<T> MinimumValue();
    BSTNode<T> MaximumValue();
    bool IsLeftChild();
    bool IsRightChild();    
    bool isEmpty();
};

节点头文件:

#pragma once

#include <memory>
#include <iostream>

template <typename T>
class BSTNode
{
public:
    BSTNode(T);
    unique_ptr<T> Value;
    BSTNode* Parent;
    BSTNode* Right;
    BSTNode* Left;
};

【问题讨论】:

  • 你是不是在定义BST的头文件中#include定义了Node的头文件?请发帖minimal reproducible example
  • 是的,我确实包含了头文件。 @RSahu
  • 请发布minimal reproducible example 并显示编译器标记了哪些行。发布的代码不应引起任何编译器消息。
  • @n.m.我会的,这是我知道的第二篇关于在 stackoverflow 上发布内容的帖子。

标签: c++ generics


【解决方案1】:

您是否添加了“使用命名空间标准;”还是在声明指针时使用 std::?

这段代码编译并运行(虽然它并没有真正做任何事情):

#include <memory>

template <typename T>
class BSTNode
{
    public:
        BSTNode(T) {}
        std::unique_ptr<T> Value;
        BSTNode* Parent;
        BSTNode* Right;
        BSTNode* Left;
}; 

template <typename T>
class BST
{
    public:
        BST() {}
        shared_ptr<BSTNode<T>> Root;
        //void Insert(T newValue);
        //void Delete(TNode<T> deleteNode);
        //<T> MinimumValue();
        //TNode<T> MaximumValue();
        //bool IsLeftChild();
        //bool IsRightChild();
        //bool isEmpty();
}; 

int main()
{
    BST<int> bst;

    getchar();
    return 0;
}

【讨论】:

  • 非常感谢。我忘了使用命名空间标准添加。我应该让父母,右,左一个唯一的指针吗?
  • 我应该使用共享的还是原始的? @Marker
  • @Person • 您可以将Parent 设为weak_ptr,将Right 和Left 设为shared_ptr。但是不要让 Parent 成为 shared_ptr,因为这样对象的网格会保持自己的生命,而不是直接正确地破坏。
  • 我一直在数据结构中使用原始指针,尽管我认为 shared_ptr 对值有意义。我通常将 Node 设为私有类,因此我不必担心任何外部因素会导致指针问题。 FWIW,数据结构现在是 C++、C#、Qt 等的一部分。我已经有一段时间没有编写任何复杂的数据结构了。
猜你喜欢
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 2016-04-04
  • 2014-08-13
  • 2016-03-02
  • 2015-06-19
  • 2013-09-08
  • 2023-03-23
相关资源
最近更新 更多