2011-08-21 46 views
1

我創建了兩個類 - 一個叫輪迴:段錯誤迭代一個的QList

class circle 
{ 
public: 
    circle(); 
    QString name ; 
    int id ; 
}; 

和其他類,使用這個類:

class soso 
{ 
public: 
    soso(); 
    QList<circle*> lis; 
    void go(); 
}; 

在索索的構造函數我加上兩個圓:

soso::soso() 
{ 
    circle* c1 = new circle(); 
    circle* c2= new circle(); 
    c1->id=1; 
    c1->name="yamen"; 
    c2->id=2; 
    c2->name="hasan"; 
    lis.append(c1); 
    lis.append(c2); 
} 

,並在主窗口中我打過電話了,其包括在這裏

走法
void soso::go() 
{ 

    QFile file("database.txt"); 
    if(!file.open(QIODevice::WriteOnly)) 
    throw " cannot open file ! "; 
    QDataStream out(&file); 
    int i=0; 
    QList<circle*>::iterator it1 =lis.begin(); 

    for(i=0;it1!=lis.end();it1++); 
    { 
    out<<(*it1)->id; // segmentation error here 
    out<<(*it1)->name; 
    } 
} 

但是我收到了分段錯誤。我究竟做錯了什麼?

+0

您是否嘗試在調試器中運行應用程序? –

回答

5

你的for循環後有一個分號!那些真的很難注意到。

for(i=0;it1!=lis.end();it1++); 

This works。只是將其更改爲標準使用迭代器:

QList<circle*>::iterator it1; 

    for(it1 = lis.begin();it1!=lis.end();it1++) 
    { 
    out<<(*it1)->id; 
    out<<(*it1)->name; 
    } 
+0

確實很好,代碼仍在編譯中很有趣。 –