c++eclipseconstructorcandidate

C++ Error: "Multiple markers at this time: no matching function for call to" in constructor


Multiple markers at this line
- candidates are:
- no matching function for call to 
 'Coordinate::Coordinate()'

I am getting this error in the constructor of my class and I don't understand why. Here is the code involved:

RadialScan header

#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 class (all the methods are implemented, but the error is in the constructor and that's the code I'm providing):

#include "RadialScan.h"

RadialScan::RadialScan(char* filename){
    image.ReadFromFile(filename);
    int centerX = image.TellWidth()/2;
    int centerY = image.TellHeight()/2;
    center = Coordinate(centerX, centerY);
}
...

The error seems to be in the constructor. If I remove the constructor everything seems to compile correctly. If I delete the code inside the constructor I'm still getting the error. I don't understand why it keeps asking me for the Coordinate::Coordinate() constructor even when I don't have a coordinate object defined in the RadialScan(char* filename) constructor.

Additionally, these are the files for the Coordinate class: header:

#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 class:

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

Solution

  • Your constructor must look like

    RadialScan::RadialScan(char* filename) : center (0, 0) {
        image.ReadFromFile(filename);
        int centerX = image.TellWidth()/2;
        int centerY = image.TellHeight()/2;
        center = Coordinate(centerX, centerY);
    }
    

    this because you did not implement default constructor and you can not create center object by default, so the only way is to call explicity Coordinate constructor with some default values.