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上的這種變體),我對於以這種方式執行操作的正確方式感到不知所措。
如何從用這種方式編寫的函數中傳出一個類似列表的對象?
謝謝!
亞歷
您尚未顯示足夠的代碼。在你發佈的代碼中沒有調用addData。儘量減少代碼是件好事,但您需要提供足夠的代碼,以便其他人可以編譯它並重現問題。 –
另外,在'processStringVector()'中,第一行是一個函數聲明。這裏沒有理由返回一個函數。 – LavaHot