Мне нужна помощь, чтобы понять, почему моя программа не будет работать. У меня такое чувство, что проблема скрывается в моей плохо написанной функции шаблона, и я хочу ее исправить.Шаблонные классы и функции шаблона: Точка и эвклидовое расстояние
Класс точка инициализируется писать что-то вроде:.
Point<int, 2> p1; //where int is the type and 2 is the dimension (in this case 2d)
В моей основной функции я инициализировать точки и добавить значения для каждого значения в массиве Point (бывший p1.arr [0] = 3; который будет похож на x = 3), а затем я попытаюсь использовать свою функцию и распечатать ее, но программа ничего не откроет, и компилятор не скажет, что такое ошибка.
#include <iostream>
#include <cmath>
using namespace std;
template<typename T, int n>
class Point
{
public:
int dimen = n;
T arr[n];
Point<>(){};
};
template<typename A>
double euclidean_distance(A a, A b){
double k = 0;
for (int i = 0; i < a.dimen; ++i){ //neglecting the fact that a and b may be of
double op = (b.arr[i] - a.arr[i]); //different dimensions
k += pow(op, 2);
}
return sqrt(k);
}
Евклидов уравнение расстояния основано на измерениях двух точек анализируемый:
В 2-мерном пространстве: SQRT ((х2 - х1)^2 + (у2 - у1)^2)
В 3-мерном пространстве: SQRT ((х2 - х1)^2 + (у2 - у1)^2 + (z2 - z1)^2)
Так что это проблема? Кстати, вам не нужно сохранять измерение точки в каждом точечном объекте. Вы можете использовать для этого элемент статических данных. – juanchopanza
, честно говоря, вам даже не нужен член, это часть типа. Во всяком случае, вопрос будет полезен. –