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

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()'

我在 class 的构造函数中遇到此错误,我不明白为什么。这是涉及的代码:

径向扫描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(所有方法都已实现,但错误在构造函数中,这就是我提供的代码):

#include "RadialScan.h"

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

错误似乎在构造函数中。如果我删除构造函数,一切似乎都能正确编译。如果我删除构造函数中的代码,我仍然会收到错误消息。我不明白为什么即使我没有在 RadialScan(char* filename) 构造函数中定义坐标 object ,它也会一直向我询问 Coordinate::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);
}

您的构造函数必须类似于

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

这是因为你没有实现默认构造函数,默认情况下你不能创建中心对象,所以唯一的方法就是用一些默认值调用显式坐标构造函数。