c++ - 错误 : No instance of constructor "Faktura::Faktura" matches the argument list

标签 c++ class vector function-call

我的 C++ 代码有问题。

我有三个类:Osoba (=Person)、Produkt (=Product) 和 Faktura (=invoice)

Osoba.h

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

大麦.cpp

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

Osoba::~Osoba()
{
}

产品.h

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

private:
    int id;
};

产品.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;
}

主要.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"与参数列表匹配。

你能帮帮我吗?

最佳答案

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

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

调用必须如下所示:

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

注意:o1 已经是一个指针。 p 必须是 vector 。

所以:

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 

关于c++ - 错误 : No instance of constructor "Faktura::Faktura" matches the argument list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49600421/

相关文章:

c++ - 如何将 vector 变量传递给函数?

c++ - 使用 vector 对堆栈进行排序

c++ - 我怎么知道在 C++ 中排序的 vector 是否有重复值

c++ - C++ 标准是否明确禁止在通过 constexpr 成员函数指针的调用中使用默认参数?

c++ - 显式模板特化的语法

c++ - 分段故障(核心已转储)-二维数组

css - Dreamweaver CS5 是否有办法像 Sharepoint Designer 那样超链接 CSS 类?

android - 在android opencv项目中构建错误?

c++ - 如何为 Windows 应用程序创建可移动/可调整大小/可配置的工具栏

c# - 通过类的方法初始化类的新实例