eclipse — ошибка C ++: & quot; в настоящее время имеется несколько маркеров: нет соответствующей функции для вызова & quot; в конструкторе

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);
}

2

Решение

Ваш конструктор должен выглядеть так

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 с некоторыми значениями по умолчанию.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]