Multiple markers at this line
- candidates are:
- no matching function for call to
'Coordinate::Coordinate()'
Я получаю эту ошибку в конструкторе моего класса, и я не понимаю, почему. Вот этот код:
Заголовок RadialScan
#ifndef RADIALSCAN_H_
#define RADIALSCAN_H_
#include "EasyBMP/EasyBMP.h"#include <vector>
#include "Coordinate.h"
using namespace std;
class RadialScan {
vector<int> distanceTimeSeries;
vector<Coordinate> timeSeries;
BMP image;
Coordinate center;
Coordinate getNextPoint(Coordinate c);
bool isBlack(Coordinate c);
void computeTimeSeries();
public:
RadialScan(char* filename);
vector<int> getDistances();
vector<Coordinate> getCoordinates();
};
#endif
Класс RadialScan (все методы реализованы, но ошибка в конструкторе, и это код, который я предоставляю):
#include "RadialScan.h"
RadialScan::RadialScan(char* filename){
image.ReadFromFile(filename);
int centerX = image.TellWidth()/2;
int centerY = image.TellHeight()/2;
center = Coordinate(centerX, centerY);
}
...
Ошибка, кажется, в конструкторе. Если я удаляю конструктор, кажется, что все компилируется правильно. Если я удаляю код внутри конструктора, я все равно получаю сообщение об ошибке. Я не понимаю, почему он продолжает спрашивать меня о конструкторе Coordinate :: Coordinate (), даже если у меня нет координатного объекта, определенного в конструкторе RadialScan (char * filename).
Кроме того, это файлы для класса Coordinate:
заголовок:
#ifndef COORDINATE_H_
#define COORDINATE_H_
class Coordinate {
int x;
int y;
public:
Coordinate(int x, int y);
void setX(int oneX);
void setY(int oneY);
int getX();
int getY();
double getMagnitude();
Coordinate operator-(const Coordinate&);
bool operator==(const Coordinate&);
Coordinate operator=(const Coordinate&);
};
#endif
класс cpp:
#include "Coordinate.h"#include <math.h>
Coordinate::Coordinate(int oneX, int oneY) {
x = oneX;
y = oneY;
}
//Setters
void Coordinate::setX(int oneX) {
x = oneX;
}
void Coordinate::setY(int oneY) {
y = oneY;
}
//Getters
int Coordinate::getX() {
return x;
}
int Coordinate::getY() {
return y;
}
double Coordinate::getMagnitude() {
return sqrt(x * x + y * y);
}
Coordinate Coordinate::operator-(const Coordinate& p) {
return Coordinate(x - p.x, y - p.y);
}
bool Coordinate::operator==(const Coordinate& p) {
return x == p.x && y == p.y;
}
Coordinate Coordinate::operator=(const Coordinate& p) {
return Coordinate(p.x, p.y);
}
Ваш конструктор должен выглядеть так
RadialScan::RadialScan(char* filename) : center (0, 0) {
image.ReadFromFile(filename);
int centerX = image.TellWidth()/2;
int centerY = image.TellHeight()/2;
center = Coordinate(centerX, centerY);
}
это потому, что вы не реализовали конструктор по умолчанию и не можете создать центральный объект по умолчанию, поэтому единственный способ — вызвать конструктор Explicity Coordinate с некоторыми значениями по умолчанию.
Других решений пока нет …