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.
相关产品推荐
相关产品推荐

