Массив создан из объектов одного класса С++

280
30 января 2019, 23:20

Написал код, но в строке

driver *a=new driver[nr]

выдает ошибку:

undefined reference to driver::driver();

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
class driver
{
private:
    string name;
    string surname;
    string categories;
    int salary, hours;

public:
    driver();
    ~driver()
    {
        std::cout<<"\nDestructor executed";
    }
    driver(driver const &cop)
    {
        name=cop.name;
        prename=cop.surname;
        categorii=cop.categories;
        salary=cop.salary;
        hours=cop.hours;
    }
driver(string n, string p, string c, int s, int h)
    {
      name.clear();
      surname.clear();
      categories.clear();
      salary=0;
      hours=0;
      init(n,p,c,s,h);
    }

void init(string n, string p, string c, int s, int h)
{
    name=n;
    surname=p;
    categories=c;
    salary=s;
    hours=h;
}
void reads()
{
    std::cout<<"\t\t Give information about driver:"<<std::endl;
    std::cout<<"\t\t---------------------------------------\n";
    std::cout<<"\tGive name: "; std::cin>>name;
    std::cout<<"\tGive surname: "; std::cin>>surname;
    std::cout<<"\tGive categories of driver license: "; std::cin>>categories;
    std::cout<<"\tHow much he is payd for hour: "; std::cin>>salary;
    std::cout<<"\tHow many hours did "<<n<<" "<<p<<" works? "; std::cin>>hours;
}
void print()
{
    std::cout<<name<<" "<<surname<<" ";
    std::cout<<"has categories "<<categories<<endl;
    std::cout<<"Salary per hour is "<<salary<<endl;
    std::cout<<"Driver had worked "<<hours<<" hours"<<endl;
    std::cout<<"Full payment is "<<salary*hours<<" $"<<endl;
}
};
int main()
{
 int nr,i;
 cout<<"Vvedite cislo voditeley:"; cin>>nr;
 driver a=new driver[nr];
 for(i=0;i<nr;i++)
 {
     a[i].reads();
     cout<<endl;
 }
 for(i=0;i<nr;i++)
 {
     a[i].print();
     cout<<endl;
 }
 delete[] a;

return 0;
}

Что не так в данном случае?

А также, как сделать чтобы а был динамическим массивом? Пробовал как в Си:

a=(driver*) malloc (nr*sizeof(driver))

, но не получается.

Answer 1

Совершенно ясно ведь написано - нет driver::driver();. Вы объявили конструктор по умолчанию driver();, но тела-то не написали...

Еще у вас какие-то левые имена в

    prename=cop.surname;
    categorii=cop.categories;

В классе таких членов нет.

В reads() не объявлены n и p.

Ну, и в

driver a=new driver[nr];

у вас не хватает звездочки. Это - что касается синтаксиса.

Что вы понимаете под "динамическим массивом"? Если массив, выделенный в куче - то вы его уже получили (как только допишете конструктор по умолчанию). Через malloc категорически не советую - это просто выделение памяти, конструкторы/деструкторы не будут вызываться, и вообще, это не наш (C++) метод :)

Если массив, динамически меняющий свой размер во время выполнения - то руками это - судя по вашему коду - вам еще рановато, имеет смысл использовать vector.

READ ALSO
Проблема с записью в значений в dat файл

Проблема с записью в значений в dat файл

Мне нужно построить график функции распределенияДля этого я решил использовать GnuPlot

183
Стандартные методы (функции) для работы с массивами в C++

Стандартные методы (функции) для работы с массивами в C++

Этот вопрос уже наверняка поднимался не раз, но что-то я не могу найти конкретного ответа да или нетУчу C++, возник вопрос: существуют ли стандартные...

186
Как можно скомпилировать C++ Linux/Android/etc программу из-под Windows?

Как можно скомпилировать C++ Linux/Android/etc программу из-под Windows?

Вопрос в заголовкеКак можно скомпилировать бинарник для использования на Linux/Android/etc, используя Windows? Для сборки использую make, но, вроде, gcc не умеет...

238