с ++ нахождение расстояния между 2 точками

0

В моей тестовой программе у меня есть две точки, и я хочу найти расстояние между ними с моим расстоянием. Но я получаю ответ 0.

  1. Почему он дает 0?
  2. Как я могу это исправить?

    Точка <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
  • 2
    Скомпилируйте все предупреждения и отладочную информацию (например, используя g++ -Wall -g ). Узнайте, как использовать отладчик (например, gdb )
  • 0
    Этот вопрос кажется не по теме, потому что SO не является онлайн-сервисом отладки.
Показать ещё 1 комментарий
Теги:

1 ответ

0
Лучший ответ

Во-первых, ваш список coords не знает, что вы хотите, чтобы его размер был n. Его размер после инициализации по умолчанию, как и следующий, равен 1:

list <float> coords = {0.0};

Правильный способ его построения:

list <float> coords = list <float> (n, 0.0);

Во-вторых, вы выделяете новые coords внутри функции distanceFrom:

list<float> coords;

Это coords реальные coords точки, которые вы на самом деле хотите использовать. Удалите эту строку, и все будет в порядке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню