В моей тестовой программе у меня есть две точки, и я хочу найти расстояние между ними с моим расстоянием. Но я получаю ответ 0.
Как я могу это исправить?
Точка <2> v1; // это должно иметь {0.0, 0.0} Точку <2> v3 {list {2.0.3.0}}; float f = v1.distanceFrom(v3); cout << f << endl;
У меня есть файл point.h.
#ifndef POINT_H
#define POINT_H
#include <iostream>
#include <list>
#include <sstream>
#include <string>
using std::stringstream;
#include <cmath>
using namespace std;
template<unsigned short n>
class Point {
public:
list <float> coords = {0.0};
Point <n>() = default;
Point <n>(list<float> coords){
if (coords.size()!=n) {
throw string ("Vale koordinaatide arv");
}
this-> coords=coords;
}
string toString(){
string sone;
ostringstream ss;
sone.append("(");
auto it3= coords.begin();
while ((it3) != coords.end()){
ss << (*it3);
sone.append(ss.str());
ss.str("");
sone.append(",");
++it3;
}
sone.pop_back();
sone.append(")");
return sone;
}
float distanceFrom (Point <n> v){
float s=0;
list<float> coords;
auto it1= coords.begin();
auto it2= v.coords.begin();
while ((it1) != coords.end()){
s+=(*it1 -*it2)*(*it1-*it2);
it1++;
it2++;
}
return sqrt(s);
}
friend std::ostream& operator <<(std::ostream& out, const Point<n>& v)
{
out << "("<<"Test"<<")";
return out;
}
};
#endif
Во-первых, ваш список coords
не знает, что вы хотите, чтобы его размер был n
. Его размер после инициализации по умолчанию, как и следующий, равен 1
:
list <float> coords = {0.0};
Правильный способ его построения:
list <float> coords = list <float> (n, 0.0);
Во-вторых, вы выделяете новые coords
внутри функции distanceFrom
:
list<float> coords;
Это coords
реальные coords
точки, которые вы на самом деле хотите использовать. Удалите эту строку, и все будет в порядке.
g++ -Wall -g
). Узнайте, как использовать отладчик (например,gdb
)