2012-03-27 86 views
1

當在我的應用程序中調用此拷貝構造函數時,此拷貝構造函數進入無限循環,即不斷調用自身。 當我調試終止在第一行本身的程序。 使用的foreach循環是一個Qt foreach。錯誤:模板拷貝構造函數自己調用

template<class TValue> 
Locus<TValue>::Locus (const Locus<TValue>& source) : QVector<TValue>(source) // program terminates here 
{ 
    std::cout << "calling self from here " << std::endl; 
    foreach (typename Locus<TValue>::value_type l, source) 
    { 
     this->push_back(l); 
    } 
} 
+0

你的拷貝構造函數不是模板。這只是一個普通的函數(就像構造函數可以被稱爲那樣)。 – 2012-03-27 10:20:37

+0

對不起,我沒有得到你... – shofee 2012-03-27 10:28:15

回答

5

Qt docs

Qt automatically takes a copy of the container when it enters a foreach loop.

+0

請你詳細說明解決方案.. – shofee 2012-03-27 10:29:38

+1

@shobi:我不知道Qt API,但解決方法是使用一些不需要' source'。也許是一個正常循環? – 2012-03-27 10:32:27

+0

好吧,所以你的意思是說,QT的foreach需要源的副本,那麼BOOST_FOREACH – shofee 2012-03-27 10:34:49