2014-10-03 58 views
-4

我正在做一個簡單的矢量類,並且在初始化我的對象時遇到了問題。這是我的程序/問題的基礎:沒有訪問矢量類中的矢量

int main() { 
bla v1(100); 

int i=0; 
while (i < 101) { 
    v1.initialise(2.0, i); 
    i++; 
}; 
return 0; 
} 

頭文件:

class bla { 
private: 
    int m_size; 
    std::vector<double> v; 
public: 
    bla (int i) { 
    m_size = i; 
    std::vector<double> v(m_size); 
    } 
    void initialise(double gg, int i) { 
    v[i] = gg; 
    }; 
} 

看來,構造函數工作正常,但是當我嘗試並初始化V1的所有元素2.0中,有是一個分段錯誤,就像v [i]在initialise()中無法到達一樣。

任何幫助的歡迎,

瑞安

+0

通過編寫類來使用... std :: vector來實現'std :: vector'是非常沒有意義的 - 我建議你[閱讀'std :: vector'可以給你的東西](http:/ /www.cplusplus.com/reference/vector/vector/)。 – GingerPlusPlus 2014-10-03 15:21:12

+0

嗨,感謝您的快速回復!我想我可能在那裏犯了一個錯誤,但不幸的是我得到了向量的第一個元素的分段錯誤。 – ryan 2014-10-03 15:24:51

+0

@GingerPlusPlus - 我同意,但我會請你在這裏玩。 – ryan 2014-10-03 15:25:43

回答

4

變化:

bla (int i) { 
    m_size = i; 
    std::vector<double> v(m_size); 
} 

到:

bla (int i) : m_size(i), v(m_size) { 
} 

才把

while (i < 101) { 

到:

while (i < 100) { 
//   ^^^ 
+0

擊敗我,擁有+1。但是你可以添加一些解釋。 – Angew 2014-10-03 15:21:51

+0

嗨,感謝您的回覆,但即使v1.initialise(2.0,1)給我一個分段錯誤 – ryan 2014-10-03 15:27:58

+0

@ryan:介意分享**整個**代碼,「給你分段錯誤」? – 2014-10-03 15:28:45

3

bla (int i) { 
    m_size = i; 
    std::vector<double> v(m_size); 
} 

你有一個局部變量v,其中隱藏的成員變量。
您正在初始化本地向量以具有m_size元素,並且在構造函數完成時將其丟棄,使成員向量保持不變且爲空。
由於成員向量爲空,因此v[i] = gg;對於所有i均無效。

你應該使用初始化器列表:

bla (int i): m_size(i), v(i) {} 

此外,

while (i < 101) 

會遍歷其中有元素的範圍[0, 100],但你的載體只有100
這將導致更多的問題,很可能是另一次崩潰。