Error: No instance of constructor "Faktura::Faktura" matches the argument list

Error: No instance of constructor "Faktura::Faktura" matches the argument list

我的 C++ 代码有问题。

我有三个 类:Osoba(=人)、Produkt(=产品)和 Faktura(=发票)

Osoba.h

class Osoba
{
 public:
     Osoba(int vek, string jmeno);
     ~Osoba();
     int vek;
     string jmeno;
};

Osoba.cpp

Osoba::Osoba(int vek, string jmeno)
{
    this->vek = vek;
    this->jmeno = jmeno;
}

Osoba::~Osoba()
{
}

Produkt.h

class Produkt
{
public:
    Produkt(int id, string jmeno, double cena);
    ~Produkt();
    string jmeno;
    double cena;

private:
    int id;
};

Produkt.cpp

Produkt::Produkt(int id, string jmeno, double cena)
{
    this->id = id;
    this->jmeno = jmeno;
    this->cena = cena;
}

Produkt::~Produkt()
{
}

Faktura.h

class Faktura
{
public:
    Faktura(int id, Osoba * osoba, vector<Produkt> produkty);

    ~Faktura();

    int CelkovaCena();

    Osoba * osoba;

    vector<Produkt> produkty;

private:
    int id;
};

Faktura.cpp

Faktura::Faktura(int id, Osoba * osoba, vector<Produkt> produkty)
{
    cout << "konstruktor Faktura" << endl;
    this->id = id;
    this->osoba = osoba;
    this->produkty = produkty;
}

Faktura::~Faktura()
{
    cout << "destruktor Faktura" << endl;
}

int Faktura::CelkovaCena()
{
    int suma = 0;

    for (int i = 0; i < produkty.size(); i++)
    {
        suma+=produkty[i].cena;
    }
    return suma;
}

main.cpp

int main()
{
    Produkt * p1 = new Produkt(1, "Konvice", 450.0);
    Produkt * p2 = new Produkt(2, "Autolekarnicka", 150.0);

    Osoba * o1 = new Osoba(18,"Jakub");

    Faktura * f1 = new Faktura(1,*o1,p1);   //error

    delete p1;
    delete p2;
    delete o1;
    //delete f1;

    return 0;
}

问题是我不知道如何在 main.cpp 中使用 Faktura 创建 "new"。它给了我一个错误:没有构造函数实例 "Faktura::Faktura" matches the argument list.

你能帮帮我吗?

根据您的构造函数: Faktura(int id, Osoba * osoba, vector<Produkt> produkty);,参数列表类型为:指向 Osoba 的 int 指针和 Produkt 的向量。 您没有发送正确的参数。 将第二个参数更改为指针,将第三个参数更改为指针。

你用 * 声明了一个指针,但你在没有它的情况下使用它,除非你想看到指向对象的内容。

示例:

int variable = 5;

void some_function(int *pointer_parameter) // pointer declaration
{
   // some work
}

int *pointer;            // declaration
pointer = &variable;     // usage
some_function(pointer);  // usage (you do not pass *pointer but pointer

所以...

您这样定义了构造函数:

Faktura(int id, Osoba * osoba, vector<Produkt> produkty);

而你是这样经过的:

Faktura(1,*o1,p1);

然而,

o1这里不需要星号,因为不是声明。

就这样吧:

Faktura * f1 = new Faktura(1,o1,p1) // the * removed from front of o1

更新:

p1 也不是构造函数所期望的向量,因此您必须将 p1 定义为向量(而不是指针)或将构造函数参数更改为与p1.

C++ 是一种强类型语言,因此所有参数都必须 type-compatible 带有传递的值或变量。

您必须匹配方法参数类型:

Faktura::Faktura(int id, Osoba * osoba, std::vector<Produkt> produkty)

调用必须如下所示:

Faktura * f1 = new Faktura(1, o1, p);   //error

注意:o1已经是指针了。 p 必须是矢量。

所以:

int main()
{
    Produkt * p1 = new Produkt(1, "Konvice", 450.0);
    Produkt * p2 = new Produkt(2, "Autolekarnicka", 150.0);

    std::vector<Produkt> p;

    p.push_back(*p1);
    p.push_back(*p2);

    Osoba * o1 = new Osoba(18,"Jakub");

    Faktura * f1 = new Faktura(1, o1, p);  

    cout <<  "Celkova cena = " << f1->CelkovaCena() << endl;

    delete p1;
    delete p2;
    delete o1;
    delete f1;

    return 0;
}

输出:

konstruktor Faktura                                                                                                                       
Celkova cena = 600                                                                                                                        
destruktor Faktura 

这里有一些方法可以用来创建对象,也可以交替使用。

 /* 1 */ Produkt* p1 = new Produkt ();


/* 2 */ Produkt* p2 = new Produkt;

/* 3 */ Osoba o1;
/* 4 */ Faktura f1 = Faktura::Faktura(); 

/* 5 */Produkt* p1 = new Produkt ( *new Produkt() );

/* 6 */ Produkt* p2 = new Produkt ( *new Produkt );

和以前一样。

/* 7 */ Osoba* o1 = new Osoba ( Produkt foo5 );
/* 8 */ Faktura* f1 = new Faktura ( Faktura::Faktura() );