错误:没有构造函数的实例" Faktura :: Faktura"匹配参数列表

时间:2018-04-01 16:54:40

标签: c++ class vector function-call

我的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; } 的实例

你能帮助我吗?

4 个答案:

答案 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() );