没有匹配的函数调用Foo::Foo

no matching function for call to Foo::Foo

本文关键字:Foo 函数调用      更新时间:2023-10-16

我相信这个问题以前有人问过。我试着找了一下,但还是找不出问题所在。如果我能得到任何帮助,我将不胜感激。由于

我得到以下错误。我得到一个想法,我没有初始化顶点一旦我调用边缘的构造函数。但我不知道该怎么做。

10369.cpp: In constructor ‘Edge::Edge(Vertex, Vertex)’:
10369.cpp:34: error: no matching function for call to ‘Vertex::Vertex()’
10369.cpp:30: note: candidates are: Vertex::Vertex(int, int)
10369.cpp:6: note:                 Vertex::Vertex(const Vertex&)
10369.cpp:34: error: no matching function for call to ‘Vertex::Vertex()’
10369.cpp:30: note: candidates are: Vertex::Vertex(int, int)
10369.cpp:6: note:                 Vertex::Vertex(const Vertex&)
    #include <iostream>
    #include <math.h>
    using namespace std;
//Vertex in a graph, with x & y coordinates 
    class Vertex{
        int x , y;
        public:
            Vertex(int, int);
            ~Vertex();
            int GetX() {return x;};
            int GetY() {return y;};
    }; 
// Edge of a graph calculated from two vertices
    class Edge{
        Vertex U , V;
        float edge_weight;
            public:
                Edge(Vertex , Vertex);
                ~Edge();
                 float GetEdgeWeight() { return edge_weight; }

    };
    Vertex::Vertex(int _x , int _y){
        x = _x;
        y = _y;
    } 
// The edge weight is calculated using the pythagoras
    Edge::Edge(Vertex _U , Vertex _V){
        U = _U;
        V = _V; 
        int x = V.GetY() - U.GetY();
        int y = V.GetX() - U.GetX();
        edge_weight = sqrt(pow(x,2) + pow(y,2));
    }   
    int main (int argc , char *argv[]){
        Vertex V1(0,1) ; 
        Vertex V2(0,3);
        Edge E(V1, V2);
        float x = E.GetEdgeWeight();
        cout << x << endl;

        return 0;
    }

始终使用构造函数初始化列表来初始化数据成员-您的Vertex没有默认构造函数,这是您绝对必须使用初始化列表的情况之一。

Edge::Edge(Vertex U, Vertex V) : U(U), V(V), edge_weight(...) { }
Vertex::Vertex(int x, int y) : x(x), y(y) { }

您的Vertex类没有默认构造函数。默认初始化顶点,然后为它们赋值:

Edge::Edge(Vertex _U , Vertex _V){ // BTW _U is an identifier reserved for the implementation
        U = _U;
        V = _V; 

通常不需要默认初始化:

Edge::Edge(Vertex U , Vertex V) : U(U), V(V) {

按如下方法修改Edge构造函数:

Edge::Edge(Vertex _U , Vertex _V) :
    U(_U),
    V(_V)
{
    int x = V.GetY() - U.GetY();
    int y = V.GetX() - U.GetX();
    edge_weight = sqrt(pow(x,2) + pow(y,2));
}