[英]Infinity time of compilation C++
我試圖實現一個持久的deque結構。 但是我對C ++中的模板不是很熟悉。 現在只有一個push_front
函數,它無法正確編譯。
#include <iostream>
using namespace std;
template < typename T > class Container{
public:
T val;
Container(){}
Container(T _val){
val = _val;
}
};
template < typename T > class Deque{
public:
Container<T>* head;
Container<T>* tail;
Deque< pair<T, T> > *child;
Deque<T>(){}
Deque<T>(Container<T>* _head, Deque< pair<T, T> > *_child, Container<T>* _tail){
head = _head;
child = _child;
tail = _tail;
}
Deque<T>* push_front(T x){
if (this == NULL)
return new Deque<T>(new Container<T>(x), NULL, NULL);
if (head == NULL)
return new Deque<T>(new Container<T>(x), child, tail);
return new Deque<T>(NULL, child->push_front(make_pair(x, head->val)), tail);
}
};
int main(){
Deque<int> d;
int a = 1;
d.push_front(a);
}
有push_front函數的算法方案。 http://i.stack.imgur.com/an1xd.jpg
我相信編譯器可能會因為Deque<int>
有一個Deque<pair<int,int>>*
類型的child
Deque<int>
而感到困惑,它具有Deque<pair<pair<int, int>, pair<int, int> > >*
類型的child
Deque<pair<pair<int, int>, pair<int, int> > >*
>>> Deque<pair<pair<int, int>, pair<int, int> > >*
具有.... ad infinitum的子項,並嘗試實例化所有這些類型。
Deque<int>
child: Deque<pair<int, int> >*
child: Deque<pair<pair<int, int> , pair<int, int> > >*
child: Deque<pair<pair<pair<int, int>....
你有一個遞歸的實例化:
dt.cpp: In instantiation of 'Deque<T>::Deque(Container<T>*, Deque<std::pair<T, T> >*,
Container<T>*) [with T = std::pair<std::pair<std::pair<int, int>, std::pair<int, int> >,
std::pair<std::pair<int, int>, std::pair<int, int> > >]':
dt.cpp:38:83: recursively required from 'Deque<T>* Deque<T>::push_front(T) [with T =
std::pair<int, int>]'
等等。 如果你對Deque
進行一些小修改, g++
將開始吐出這些錯誤:
Deque<T>(Container<T>* head_, Deque< pair<T, T> > *child_, Container<T>* tail_)
: head(head_), child(child_), tail(tail_)
{ }
Deque<T>* push_front(T x)
{
if (head == NULL)
return new Deque<T>(new Container<T>(x), child, tail);
return new Deque<T>(NULL, child->push_front(make_pair(x, head->val)), tail);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.