Я только что пришел из мира Java и Python в мир C++ и столкнулся с проблемой при попытке получить значение от общедоступной функции класса const
.Не удается получить значение из класса на C++?
У меня есть класс следующим образом:
class CMDPoint
{
public:
CMDPoint();
CMDPoint(int nDimensions);
virtual ~CMDPoint();
private:
int m_nDimensions; // the number of dimensions of a point
float* m_coordinate; // the coordinate of a point
public:
const int GetNDimensions() const { return m_nDimensions; }
const float GetCoordinate(int nth) const { return m_coordinate[nth]; }
void SetCoordinate(int nth, float value) { m_coordinate[nth] = value; }
};
В конечном счете, я хотел бы написать все в clusterPoint
с в clusterPointArray
в файл. Тем не менее, сейчас Я просто тестирую его с clusterPoint
(таким образом, GetCoordinate(0)
).
ofstream outFile;
outFile.open("C:\\data\\test.txt", std::ofstream::out | std::ofstream::app);
for (std::vector<CMDPoint> ::iterator it = clusterEntry->clusterPointArray.begin(); it != clusterEntry->clusterPointArray.end(); ++it)
{
outFile << ("%f", (*it).GetCoordinate(0)); // fails
outFile << " ";
}
outFile << "\n";
outFile.close();
Проблема в том, что я вижу только файл " "
. Никакой координаты не было написано. Я сделал что-то неправильно, получая значение от const float GetCoordinate(int nth)
?
Просто используйте 'outFile << it-> GetCoordinate (0);'. Я также предлагаю добавить проверку границ в «CMDPoint :: GetCoordinate», используя «std :: vector» вместо массива, а затем использовать 'm_coordinate.at (nth)'. В противном случае вы, вероятно, столкнетесь с segfaults, если вы новичок в C++. –
@MarcClaesen Нет, все тот же. :/ –
Вы обеспечили правильность установки индекса координат? i.e 'm_coordinate [0]' фактически имеет значение. Вы не проверяете ошибки. – Chemistpp