You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++代码报错:找不到匹配的Faktura类构造函数实例

解决Faktura构造函数参数不匹配的问题

嘿,我来帮你搞定这个「找不到匹配的Faktura构造函数」的错误!先理清楚问题根源:这个错误本质就是你创建Faktura对象时传入的参数,和你在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, ...

问题解决步骤

结合发票类(Faktura)的常见需求,它一般需要关联客户(Osoba)、发票编号、商品列表(Produkt)这些信息,我给你一套完整的实现方案,照着来就能解决构造函数不匹配的问题:

1. 先补全Faktura类的头文件(Faktura.h)

#include <vector>
#include "Osoba.h"
#include "Produkt.h"

class Faktura {
public:
    // 这里定义的构造函数参数:发票编号 + 客户对象 + 商品列表
    Faktura(int cisloFaktury, Osoba klient, std::vector<Produkt> produkty);
    ~Faktura();

    // 可选:添加一个打印发票的方法,方便验证功能
    void tiskniFakturu() const;

private:
    int cisloFaktury;
    Osoba klient;
    std::vector<Produkt> produkty;
};

2. 实现Faktura的构造函数和成员函数(Faktura.cpp)

#include "Faktura.h"
#include <iostream>

Faktura::Faktura(int cisloFaktury, Osoba klient, std::vector<Produkt> produkty) {
    this->cisloFaktury = cisloFaktury;
    this->klient = klient;
    this->produkty = produkty;
}

Faktura::~Faktura() { }

void Faktura::tiskniFakturu() const {
    std::cout << "=== Faktura cislo: " << cisloFaktury << " ===" << std::endl;
    std::cout << "Klient: " << klient.jmeno << " (" << klient.vek << " let)" << std::endl;
    std::cout << "\nSeznam produktu:" << std::endl;
    for (const auto& produkt : produkty) {
        std::cout << "- " << produkt.jmeno << " | Cena: " << produkt.cena << " Kc" << std::endl;
    }
}

3. 正确创建Faktura对象的示例代码

#include "Faktura.h"
#include <vector>

int main() {
    // 先创建一个客户对象
    Osoba klient(32, "Petr Svoboda");

    // 创建两个商品对象(记得把你的Produkt.cpp补全,比如实现完整的构造函数)
    Produkt laptop(101, "Gaming Laptop", 24999.99);
    Produkt mysz(102, "Wireless Mys", 1299.99);

    // 把商品放进列表里
    std::vector<Produkt> produktySeznam;
    produktySeznam.push_back(laptop);
    produktySeznam.push_back(mysz);

    // 重点!这里传入的参数要和Faktura构造函数的声明完全匹配:int + Osoba + vector<Produkt>
    Faktura mojeFaktura(2024001, klient, produktySeznam);

    // 打印发票看看效果
    mojeFaktura.tiskniFakturu();

    return 0;
}

额外要注意的几个细节

  • 记得补全你的Produkt.cpp,完整的构造函数应该是这样的:
    Produkt::Produkt(int id, string jmeno, double cena) {
        this->id = id;
        this->jmeno = jmeno;
        this->cena = cena;
    }
    Produkt::~Produkt() { }
    
  • 如果不想拷贝对象(比如Osoba或Produkt比较大),可以把构造函数的参数改成const引用,比如Faktura(int cisloFaktury, const Osoba& klient, const std::vector<Produkt>& produkty),这样性能更好。
  • 一定要检查你创建Faktura对象时的参数:比如不能少传参数、不能把参数类型搞混(比如把字符串传给int类型的参数)、顺序也不能错,必须和构造函数声明的完全一致。

内容的提问来源于stack exchange,提问作者Mark B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:06:52