我的C ++代码有问题。
我有三个班级:b <- c(1, 3, 5)
un1 <- unique(diff(c(1, 3, 5)))
paste(b[1], un1, b[length(b)], sep=":")
#[1] "1:2:5"
(=人),Osoba
(=商品)和Produkt
(=发票)
Osoba.h
Faktura
Osoba.cpp
class Osoba
{
public:
Osoba(int vek, string jmeno);
~Osoba();
int vek;
string jmeno;
};
Produkt.h
Osoba::Osoba(int vek, string jmeno)
{
this->vek = vek;
this->jmeno = jmeno;
}
Osoba::~Osoba()
{
}
Produkt.cpp
class Produkt
{
public:
Produkt(int id, string jmeno, double cena);
~Produkt();
string jmeno;
double cena;
private:
int id;
};
Faktura.h
Produkt::Produkt(int id, string jmeno, double cena)
{
this->id = id;
this->jmeno = jmeno;
this->cena = cena;
}
Produkt::~Produkt()
{
}
Faktura.cpp
class Faktura
{
public:
Faktura(int id, Osoba * osoba, vector<Produkt> produkty);
~Faktura();
int CelkovaCena();
Osoba * osoba;
vector<Produkt> produkty;
private:
int id;
};
的main.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;
}
问题在于我不知道如何制作新的&#34;与main.cpp中的Faktura。它给了我一个错误:没有构造函数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;
}
的实例
你能帮助我吗?
答案 0 :(得分:0)
根据你的构造函数:
Faktura(int id, Osoba * osoba, vector<Produkt> produkty);
,参数列表类型是:指向Osoba
的int指针和Produkt
的向量。
您没有发送正确的参数。
将第二个参数更改为指针,将第三个参数更改为指针。
答案 1 :(得分:0)
您使用*
声明了一个指针,但除非您想要查看指向对象的内容,否则不使用它。
示例:
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
定义为向量(而不是指针),要么将构造函数参数更改为与{{ 1}}。
C ++是一种强类型语言,因此所有参数都必须与传递的值或变量类型兼容。
答案 2 :(得分:0)
您必须匹配方法参数类型:
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
答案 3 :(得分:0)
以下是一些可用于创建对象的方法,也可以互相使用。
/* 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() );