我目前正在尝试编写我的第一个模板类作为我的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
不应该是一个指针,你应该像这样创建它:Dequeui;