2016-05-11 29 views
1

我正在做一個項目,它可以從基礎和側面輸入創建等腰三角形。然後我需要計算座標並以某種可用的方式存儲它們。我試圖做的是創建一個頂點的二維向量 - 這樣一個由三個座標組成的數組,每個座標都有一個二維數組(x和y值)。 (如翻譯)當我試圖訪問值我得到一個運行時錯誤:向量下標越界......向量下標超出範圍 - 類構造函數初始化中的2D向量

代碼:

私人:

double base, side; 
vector<double> coordA, coordB, coordC; 
vector<vector<double> > vertex; 

市民:

isoTri() : base(0), side(0), coordA(0), coordB(0), coordC(0) {} 
isoTri(double base_in, double side_in) : base(base_in), side(side_in) 
{ 
    coordA.push_back(0); coordA.push_back(0); //bottom left corner at origin 
    coordB.push_back(base2); coordB.push_back(height); //top corner 
    coordC.push_back(base); coordC.push_back(0); //bottom right corner 
    vector<vector<double> > vertex{ 3 }; 
    vertex[0] = { coordA }; vertex[1] = { coordB }; vertex[2] = { coordC }; //vector of coordinates 
    } 
~isoTri() {} 

void translate(double dx, double dy){ 

    for (int i = 0; i < 2; i++){ 
     for (int j = 0; j < 2; j++){ 
      vertex[i][0] = vertex[i][0] + dx; 
      vertex[j][1] = vertex[j][1] + dy; 
     } 
    } 
}; ` 
+0

您是否通過語句調試程序語句? –

回答

3

vector<vector<double> > vertex{ 3 };,正在聲明一個名爲vertex的新局部變量,它與成員變量vertex無關。它仍然是空的。您可以:

isoTri(double base_in, double side_in) : base(base_in), side(side_in) 
{ 
    coordA.push_back(0); coordA.push_back(0); //bottom left corner at origin 
    coordB.push_back(base2); coordB.push_back(height); //top corner 
    coordC.push_back(base); coordC.push_back(0); //bottom right corner 
    vertex.push_back(coordA); 
    vertex.push_back(coordB); 
    vertex.push_back(coordC); 
} 
+0

非常感謝你......我知道這會很簡單。 –

+0

@FergusFrank咖啡時間。祝你好運。 :) – songyuanyao