Error in creating array of objects and passing objects.

I've written the following program but it show an error :
87|error: invalid use of ‘student_waiver::student_waiver’|

Why the error? How to fix it?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <bits/stdc++.h>

using namespace std;

class student
{
    string name;
    string id;
    double balance;

public:

    student(string n,string i, double bal)
    {
        name=n;
        id=i;
        balance=bal;
    }

    string getName()
    {
        return name;
    }

    string getID()
    {
        return id;
    }

    double getBalance()
    {
        return balance;
    }

};

class student_waiver:public student
{
    double cgpa;

public:

    student_waiver();

    student_waiver(string n,string i, double bal, double c):student(n,i,bal)
    {
        cgpa=c;
    }

    int wav_cal()
    {
        if(cgpa<3.5)
            return 0;
        else if(cgpa>3.5)
            return 20;
    }

    double cur_bal()
    {
        double temp = wav_cal();

        double cb;

        if(temp==20)
            cb=(getBalance()-(getBalance()*.20));
        else
            cb=getBalance();

        return cb;
    }


};

int main()
{
    string n,i;
    double b,c;

    student_waiver s[5];

    for(int i=0; i<5; i++)
    {
        getline(cin,n);
        cin>>i;
        cin>>b>>c;
        s[i].student_waiver(n, i, b, c);
    }

    for(int i=0; i<5; i++)
    {
        cout<<"Name : "<<s[i].getName()<<endl;
        cout<<"ID : "<<s[i].getID()<<endl;
        cout<<"Balance : "<<s[i].getBalance()<<endl;
        cout<<"Waiver : "<<s[i].wav_cal()<<"%"<<endl;
        cout<<"Current Balance : "<<s[i].cur_bal()<<endl;
    }

    return 0;
}
The five student_waiver objects are created and initialized with the default constructor (the constructor that takes no arguments) when the array is created on line 80. You can't use the constructor on already existing objects like you try to do on line 87.

One way to solve this is to create a new student_waiver object and use the copy assignment operator to update the object in the array.
 
s[i] = student_waiver(n, i, b, c);

student_waiver();

no definition for this constructor.

s[i].student_waiver(n, i, b, c);

You should use a class function here. student_waiver(n,i,b,c) is a constructor and is therefore automatically used when the class/object is created. It is NOT used to change values like that; btw you can use = operator to call it s[i]=sample[i](n, i, b, c); and also please take note about how inheritance acts, see http://www.cplusplus.com/reference/ for more info. :)
Thank you Peter. But sorry to say that I am trying but its not happening! There is always an error.
Would you please write the code for the main function?
Topic archived. No new replies allowed.