当前位置:  开发笔记 > 编程语言 > 正文

为什么我得到"无法从Dequeu <int>转换为int"错误?

如何解决《为什么我得到"无法从Dequeu<int>转换为int"错误?》经验,为你挑选了1个好方法。

我目前正在尝试编写我的第一个模板类作为我的c ++类的赋值,但我不明白为什么我一直收到此错误:

g++ -c main.cpp
main.cpp: In function ‘int main(int, char**)’:
main.cpp:12:14: error: cannot convert ‘Dequeu’ to ‘int’ in initialization
  int ou = i[0];

main.cpp中:

#include "main.h"
#include 
#include 

using namespace std;
int main (int args, char ** argc){

    Dequeu* i = new Dequeu();

    i->push_back (10);

    int ou = i[0];

    cout<<"i[0]: "<

与main.h:

#include "Dequeu.h"

dequeu.h:

#ifndef MAIN_H
#define MAIN_H
#endif

#include "Node.h"
#include  //NULL

template
class Dequeu {
public:
    Dequeu();   ~Dequeu();

    void push_back(T);

    T &operator[] (int i) {
        if (i=0){

            //head?
            if (i == 0)
                return head->value;
            //tail?
            if (i == size-1)
                return tail->value;

            //other:
            Node* temp = head;
            i--;

            while (i != 0 ){
                temp = temp->next;
                i--;
            }

            return temp->Value();
        }
    }

private:
    Node * head;
    Node * tail;
    int size;
};

template
Dequeu::Dequeu() {
    head->nullify();
    tail->nullify();
}

template
Dequeu::~Dequeu(){
    Node* temp = head;

    while (temp->Next() != NULL) {
        temp = temp->next;
        delete(head);
        head=temp;
    }
}

template
void Dequeu::push_back(T t){
    Node* newNode;

    newNode->Value(t);
    newNode->prev = tail;

    tail->next = newNode;
    tail = newNode;

    if (head == NULL)
        head = tail;

    size++;
}

和Node.h:

#include  //NULL

template 
class Node {
public:
    Node* prev;
    Node* next;
    T value;

    Node(); ~Node();

    void nullify ();

private:
};

template 
void Node::nullify() {
    this->value = NULL;
    this->next = NULL;
    this->prev = NULL;}

我尝试的最后一件事是事件刚刚返回this->head->value而没有检查operator []中的输入整数.

该类还没有完成,所以不要错过为什么只实现了两个函数...

请随时告诉我如何更好地编写这些代码,如果你发现它非常糟糕,我真的很糟糕.



1> TartanLlama..:
Dequeu* i = new Dequeu();
int ou = i[0];

既然i是一个指针,i[0]不能意味着调用operator[]Dequeu,它本质上是一样的*i.

你的意思是int ou = (*i)[0];,但实际上i不应该是一个指针,你应该像这样创建它:

Dequeu i;

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有