将自定义类与自定义模板容器一起使用

哈布都

我试图定义一个自定义模板容器,然后向其中添加自定义类对象(学生)。这是我的代码:

class Student{
public:
    string subject;
    Student(string _subject){
        subject = _subject;
    }
};

这是我的LinkedList模板代码

template <class T>
class LinkedList{

private:
    struct Node{
        Node *next;
        T value;
    };
    Node *root;
    Node *curr;
    int count;

public:
    LinkedList() : count(0), root(NULL){}
    void add(T val){
        if (root == NULL){
            root = new Node;
            root->value = val;
            root->next = NULL;
            curr = root;
        }
        else{
            curr->next = new Node;
            curr = curr->next;
            curr->value = val;
            curr->next = NULL;
        }
        count++;
    }

    void print(){
        for (Node *itr=root; itr != NULL; itr = itr->next){
            cout << itr->value << endl;
        }
    }
};

int main(){
    LinkedList<Student> a;
    Student sam("Math");
    a.add(sam)
}

当我运行它时,我得到

linkedlist.cpp:在构造函数'LinkedList :: Node :: Node()'中:linkedlist.cpp:27:从'void LinkedList :: add(T)[with T = Student]实例化

linkedlist.cpp:133:从此处实例化

linkedlist.cpp:27:错误:没有匹配函数可以调用'Student :: Student()'linkedlist.cpp:18:注意:候选人是:Student :: Student(std :: string)

linkedlist.cpp:15:注意:Student :: Student(const Student&)linkedlist.cpp:在成员函数'void LinkedList :: add(T)[with T = Student]'中:

linkedlist.cpp:40:注意:此处首先需要综合方法'LinkedList :: Node :: Node()'

我不知道该错误真正意味着什么,以及它在要求我做什么。如果我改为这样做:

int main(){
    LinkedList<Student*> a;
    Student sam("Math");
    a.add(&sam);
}

它工作正常。

但是存储对象的引用不是我想要的。如何获得我的LinkedList来复制我想添加到该对象的对象?

提前致谢!

3442

首先...

#include <utility>

现在,改变这个...

struct Node {
    Node* next;
    T     value;
};

为了...

struct Node {
    Node* next;
    T     value;

    inline Node(const T &value) : value(value), next(nullptr) {}
    inline Node(T &&value) : value(std::move(value)), next(nullptr) {}
};

和这个...

void add(T val) {
    if(this->root == nullptr) {
        this->root = new Node;
        this->root->value = val;
        root->next = NULL;
        curr = root;
    } else {
        curr->next = new Node;
        curr = curr->next;
        curr->value = val;
        curr->next = NULL;
    }

    count++;
}

为了这...

void add(const T &val){
    if(this->root == nullptr) {
        this->root = new Node(val);
        this->curr = root;
    } else {
        this->curr->next = new Node(val);
        this->curr = this->curr->next;
    }

    this->count++;
}

void add(T &&val){
    if(this->root == nullptr) {
        this->root = new Node(std::move(val));
        this->curr = root;
    } else {
        this->curr->next = new Node(std::move(val));
        this->curr = this->curr->next;
    }

    this->count++;
}

发生的情况是您正在使用隐式默认构造函数创建Node对象new Node这意味着将Node::value调用for的默认构造函数那你能告诉我是否有吗?否。Student没有默认的构造函数,因此它将无法正常工作。

顺便说一句,我对您的代码做了一些小的重新设计,以避免出现一些问题。另外,您现在可以使用move语义(try list.add(Student("Joe")))!

此外,请记住初始化currnullptr在构造函数初始化列表!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与模板模板类一起使用的自定义模板参数活页夹

来自分类Dev

将自定义 Python 类与 Django 应用程序一起使用

来自分类Dev

如何使用VBA将自定义工具提示与excel图表一起使用?

来自分类Dev

通常,如何将自定义卡与recyclerview一起使用?

来自分类Dev

将自定义适配器与CursorLoader一起使用

来自分类Dev

将自定义类型与Boost程序选项一起使用

来自分类Dev

如何将自定义HeaderFilterStrategy与Apache Camel Email组件一起使用

来自分类Dev

可以将自定义信任库与SOAPConnection一起使用吗?

来自分类Dev

将自定义颜色与iOS图表标签一起使用

来自分类Dev

无法将自定义自动配置与spring-data-elasticsearch一起使用

来自分类Dev

将自定义git命令与buildnumber-maven-plugin一起使用

来自分类Dev

在ASP.Net项目中将自定义对象与ReportViewer一起使用

来自分类Dev

ASP MVC / EF6-将自定义验证与泛型一起使用

来自分类Dev

将自定义LayoutInflater.Factory与AppCompatDelegate一起使用

来自分类Dev

将自定义DataContractResolver与多个程序集一起使用

来自分类Dev

将自定义登录屏幕与phpCas一起使用

来自分类Dev

将自定义属性与 @page 规则一起使用

来自分类Dev

自定义RewriteRule无法与WordPress一起使用?

来自分类Dev

将ngModel与自定义组件一起使用

来自分类Dev

将SqlCommandProvider与自定义超时一起使用

来自分类Dev

将ViewPager与自定义ViewGroups一起使用

来自分类Dev

与swift项目一起使用自定义日历

来自分类Dev

使IClassifier与自定义内容类型一起使用

来自分类Dev

将%dopar%与自定义函数一起使用

来自分类Dev

与swift项目一起使用自定义日历

来自分类Dev

与自定义对象一起使用自动套用

来自分类Dev

将标识与自定义属性一起使用

来自分类Dev

自定义RewriteRule无法与WordPress一起使用?

来自分类Dev

如何使自定义键盘与Swift一起使用

Related 相关文章

  1. 1

    与模板模板类一起使用的自定义模板参数活页夹

  2. 2

    将自定义 Python 类与 Django 应用程序一起使用

  3. 3

    如何使用VBA将自定义工具提示与excel图表一起使用?

  4. 4

    通常,如何将自定义卡与recyclerview一起使用?

  5. 5

    将自定义适配器与CursorLoader一起使用

  6. 6

    将自定义类型与Boost程序选项一起使用

  7. 7

    如何将自定义HeaderFilterStrategy与Apache Camel Email组件一起使用

  8. 8

    可以将自定义信任库与SOAPConnection一起使用吗?

  9. 9

    将自定义颜色与iOS图表标签一起使用

  10. 10

    无法将自定义自动配置与spring-data-elasticsearch一起使用

  11. 11

    将自定义git命令与buildnumber-maven-plugin一起使用

  12. 12

    在ASP.Net项目中将自定义对象与ReportViewer一起使用

  13. 13

    ASP MVC / EF6-将自定义验证与泛型一起使用

  14. 14

    将自定义LayoutInflater.Factory与AppCompatDelegate一起使用

  15. 15

    将自定义DataContractResolver与多个程序集一起使用

  16. 16

    将自定义登录屏幕与phpCas一起使用

  17. 17

    将自定义属性与 @page 规则一起使用

  18. 18

    自定义RewriteRule无法与WordPress一起使用?

  19. 19

    将ngModel与自定义组件一起使用

  20. 20

    将SqlCommandProvider与自定义超时一起使用

  21. 21

    将ViewPager与自定义ViewGroups一起使用

  22. 22

    与swift项目一起使用自定义日历

  23. 23

    使IClassifier与自定义内容类型一起使用

  24. 24

    将%dopar%与自定义函数一起使用

  25. 25

    与swift项目一起使用自定义日历

  26. 26

    与自定义对象一起使用自动套用

  27. 27

    将标识与自定义属性一起使用

  28. 28

    自定义RewriteRule无法与WordPress一起使用?

  29. 29

    如何使自定义键盘与Swift一起使用

热门标签

归档