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() );
我的 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() );