POO

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++

POO

Mesajde stelian_2681 » 16 Oct 2016, 23:34

In urmatorul cod am urmatoarea eroarea (pe langa altele): no matching function for call to 'Student::Student()'
in linia template <class Element, int MAX_STIVA> Stiva<Element, MAX_STIVA>::Stiva()
Ce inseamna aceasta eroare ?

#include <iostream>
#include <cstring>
using namespace std;

class Persoana
{
protected:
char *nume;
public:
Persoana(char *nume)
{
nume = new char[strlen(nume)+1];
this->nume = nume;
}
virtual ~Persoana()
{
if (nume)
delete[] nume;
nume = 0;
}
};

class Student:public Persoana
{
protected:
char facultate[100];
public:
Student(char *nume, char facultate[100]):Persoana(nume)
{
for (int i=0; i<100; i++)
this->facultate[i] = facultate[i];
}
~Student()
{ }
Student& operator= (const Student& box)
{
if (this != &box)
{
nume = new char[strlen(box.nume)+1];
strcpy(nume, box.nume);
for (int i=0; i<100; i++)
facultate[i] = box.facultate[i];
}
return *this;
}
};

template <class Element, int MAX_STIVA> class Stiva
{
private:
Element tab[MAX_STIVA];
int index_varf;
public:
Stiva();
~Stiva();
void push(Element);
void pop();
Element top();
bool is_empty();
};

template <class Element, int MAX_STIVA> Stiva<Element, MAX_STIVA>::Stiva()
{
index_varf = -1;
}

template <class Element, int MAX_STIVA> Stiva<Element, MAX_STIVA>::~Stiva()
{

}

template <class Element, int MAX_STIVA> void Stiva<Element, MAX_STIVA>::push(Element x)
{
if (index_varf<MAX_STIVA-1)
tab[++index_varf] = x;
}

template <class Element, int MAX_STIVA> void Stiva<Element, MAX_STIVA>::pop()
{
if (index_varf >= 0)
index_varf--;
}

template <class Element, int MAX_STIVA> Element Stiva<Element, MAX_STIVA>::top()
{
if (index_varf < 0)
return Element();
return tab[index_varf];
}

template <class Element, int MAX_STIVA> bool Stiva<Element, MAX_STIVA>::is_empty()
{
return index_varf == -1;
}

int main()
{
Stiva<char, 10> box1;
box1.push('a');
box1.push('f');
box1.pop();
cout << "\n Top: " << box1.top() << endl;
Stiva<Student, 5> box2;
box2.push(Student("Popescu", "Matematica"));
box2.push(Student("Alexandrescu", "Drept"));
return 0;
}
stelian_2681
Junior
Junior
 
Mesaje: 30
Membru din: 24 Iun 2013, 23:25
Judet: Olt

Re: POO

Mesajde Viorel » 17 Oct 2016, 07:51

Pentru a inițializa un tablou ca tab[MAX_STIVA], e necesar un constructor fără parametri. De exemplu:

Cod: Selectaţi tot
class Student : public Persoana
{
public:
    Student() : Persoana( "")
    {
        strcpy( facultate, "" );
    }
    . . .
Viorel
Microsoft MVP
Microsoft MVP
 
Mesaje: 281
Membru din: 13 Iul 2007, 12:26


Înapoi la Limbajul C++

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 1 vizitator