#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Course
{
public:
string name;
string instructorInCharge;
int numberOfStudents;
int totalMarks;
Course(string u, string v, int p, int q){
this->name=u;
this->instructorInCharge=v;
this->numberOfStudents=p;
this->totalMarks=q;
}
vector<int> studentMarks (numberOfStudents);
};
class Labs:public Course
{
vector<int>labMarks(numberOfStudents);
};
int main()
{
Course c("Rahul","Hota",200,300);
cout<<"hello there";
}
When I compile this code I’m getting the following error:
1.cpp:20:31: error: 'numberOfStudents' is not a type
20 | vector<int> studentMarks (numberOfStudents);
| ^~~~~~~~~~~~~~~~
1.cpp:28:29: error: 'numberOfStudents' is not a type
28 | vector<int>labMarks(numberOfStudents);
| ^~~~~~~~~~~~~~~~
Please tell me what my mistake is. numberostudents was supposed to be the size of the vector. But not any function.
If you want in-class initialization, you may do this:
vector<int> studentMarks = vector<int>(numberOfStudents);
Now the default constructor will initialize studentMarks
with vector<int>(numberOfStudents)
when an instance of Course
is created.
However, this will cause undefined behavior since numberOfStudents
is not initialized before the initialization of studentMarks
. You could use the member initalizer list instead:
Course(std::string u, std::string v, int p, int q)
: name(std::move(u)),
instructorInCharge(std::move(v)),
numberOfStudents(p),
totalMarks(q),
studentMarks(numberOfStudents)
{
}
and likewise for the Labs
class:
class Labs : public Course {
public:
Labs(std::string u, std::string v, int p, int q)
: Course(u, v, p, q), // initialize the base class part of a `Labs`
labMarks(p) // initialize the added member variable
{
}
std::vector<int> labMarks;
};