Я пытаюсь настроить среду для путешествий для коммивояжера. Это моя попытка:"нет подходящей функции для вызова 'Карта <Flat> :: functionname"
#include <iostream>
using namespace std;
#include<stdlib.h>
#include <cstdlib>
#include <cmath>
class Base //Allocate the memory space
{
protected:
int n;
typedef double Coord[2];
Coord* city_location;
Base(int ncities) : n(ncities), city_location(new Coord[n]) {}
~Base() { delete [] city_location; }
};
template <class T> class Map;
struct Flat;
template <> class Map<Flat> : public Base
{
public:
//int Path[n];
Map(int n) : Base(n)
{
int Path[n]; //Populate with random points for flat version
for (int i=0;i<n;i++)
{
city_location[i][0] = (static_cast <float> (rand())/static_cast <float> (RAND_MAX))*80;
city_location[i][1] = (static_cast <float> (rand())/static_cast <float> (RAND_MAX))*80;
Path[i] = i;
cout << "city " << i << " is at (" << city_location[i][0] << "," << city_location[i][1] << ")\n";
}
cout << "\nThe initial path is (";
for(int i=0;i<n;i++)
{
cout << Path[i]<< " ";
}
cout<< Path[0] <<")"<<endl;
pathdistance(Path, n, city_location); //Line 45
}
double distance(int i, int j) const //Pairwise distance function
{
double dx = city_location[i][0] - city_location[j][0];
double dy = city_location[i][1] - city_location[j][1];
return sqrt(dx*dx+dy*dy);
}
double pathdistance(double Path[],int n, double city_location) //total distance function
{
//cout<< city_location[0][1];
double total = 0;
for(int i=0; i<n-1;i++)
{
total += distance(Path[i],Path[i+1]);
}
total += distance(Path[n],Path[0]);
cout << "total distance is "<< total<<endl;
return total;
}
};
int main()
{
srand(1235);
Map<Flat> x(10);
cout << "distance between cities 3 and 7 is " << x.distance(3,7) << "\n";
}
Я получаю сообщ об ошибке:
45 error: no matching function for call to 'Map<Flat>::pathdistance(int [(((sizetype)(((ssizetype)n) + -1)) + 1)], int&, Base::Coord)'
Я знаю, что он должен делать с тем, как я передаю указатель, но я не могу показаться, чтобы выяснить правильный путь сделать это. Извиняюсь, если это выглядит очень уродливо для большинства из вас, но я очень новичок в C++. Полегче со мной. Заранее спасибо.
Не могли бы вы правильно отформатировать код, пожалуйста? Это будет менее запутанным. – alain
Вы используете city_location, как 2D-массив, но pathdistance ожидает постоянной. – HughB
'int Path [n];' * Нестандартное предупреждение C++ *. Вы не можете объявлять массивы с использованием переменной в виде числа записей. Ваш компилятор разрешает это, но он нестандартен. Используйте 'std :: vector' вместо этого, если вы хотите стандартного соответствия. –
PaulMcKenzie