2016-01-11 175 views
0

自從我使用C++之後已經有一段時間了,我試圖編寫一個簡短的函數來處理格式爲「{(0.00,0.00);(1.00, 0.00);(0.00,1.00);(1.00,1.00)}「轉換爲自定義類。C++從函數返回自定義類

但是,我正在努力成功地返回從函數的自定義類中的字符串中提取的值。

在下面找到相關代碼:

class TwoDMap 
{ 
private: 
    int dim, num_verts; 
    std::vector<float> int_array; 
public: 
    TwoDMap (int num_vertices, int dimension); 
    float getData(int num_vert, int dim); 
    void addData(float value); 
}; 

TwoDMap::TwoDMap(int num_vertices, int dimension) 
{ 
    num_verts = num_vertices; 
    dim = dimension; 
    int_array.reserve(num_vertices * dimension); 
} 

float TwoDMap::getData(int num_vert, int dimension) 
{ 
    return int_array[(num_vert * dim) + dimension]; 
} 

void TwoDMap::addData(float value) 
{ 
    int_array.push_back(value); 
} 

void processStringVertex(TwoDMap return_vector, int vert_index, int dimension, std::string input_vertex) 
{ 
    //Process a single portion of the string and call the addData method 
    //to add individual floats to the map 
} 

TwoDMap processStringVector(int dimension, int num_vertices, std::string input_vector) 
{ 
    TwoDMap array2D (num_vertices, dimension); 

    //Process the whole string, calling the processStringVertex method 
    //and passing in the variable array2D 

    return array2D; 
} 

int main() 
{ 
    std::string v = "{(0.00, 0.00); (1.00, 0.00); (0.00, 1.00); (1.00, 1.00)}"; 
    int dim = 2; 
    int num_verts = 4; 
    TwoDMap vect = processStringVector (dim, num_verts, v); 

    for(int i = 0; i < num_verts; i = i + 1) 
    { 
     for(int j = 0; j < dim; j = j + 1) 
     { 
      std::cout << vect.getData(i, j) << std::endl; 
     } 
    } 
} 

我的字符串算術全部恢復正常,並且代碼編譯和運行,但我的TwoDMap類返回全0中的主要方法循環,​​即使正確的價值觀正在傳遞給addData方法。

經過大量的故障排除和調試後,我認爲問題在於如何傳遞自定義類TwoDMap。然而,在嘗試了幾個變體之後(傳遞一個二維數組,傳遞一個一維數組,傳遞一個指向數組的指針,將TwoDMap與一個內部一維數組一起傳遞,以及TwoDMap上的這種變體),我對於以這種方式執行操作的正確方式感到不知所措。

如何從用這種方式編寫的函數中傳出一個類似列表的對象?

謝謝!

亞歷

+0

您尚未顯示足夠的代碼。在你發佈的代碼中沒有調用addData。儘量減少代碼是件好事,但您需要提供足夠的代碼,以便其他人可以編譯它並重現問題。 –

+0

另外,在'processStringVector()'中,第一行是一個函數聲明。這裏沒有理由返回一個函數。 – LavaHot

回答

0

按引用傳遞的地圖:

void processStringVertex(TwoDMap & return_vector, int vert_index, int dimension, 
/*        ^^^   */   std::string input_vertex) 

如果按值傳遞它作爲你此刻在做,原來的映射(即在processStringVector局部變量array2D)從來都不是改性。

相關問題