So, I was learning about inheritance and there was a question in last year's question set. It was just to create a diamond problem and inherit data member marks from base class to final class. So, I created a abstract base class for void setmarks() and override it in all inherited class. To resolve the ambiguity, I add virtual in inheritance declaration.
Here is my code:
#include <iostream>
using namespace std;
class Evalution
{
    public:
    float marks;
    virtual void setmarks()=0;
    
    void displaymarks() {}
};
class Theoretical :virtual protected Evalution
{
    public:
    float internal1, internal2;
    int assignments;
    
    void setmarks()
    {
        cout << "enter the marks in internal1, internal2, assignments" << endl;
        cin >> internal1 >> internal2 >> assignments;
    }
};
class Practical :virtual protected Evalution
{
    public:
    float lab, viva;
    
    void setmarks()
    {
        cout << "enter the marks in lab and viva" << endl;
        cin >> lab >> viva;
    }
};
class Final : public Theoretical, public Practical
{
    public:
     marks = internal1 + internal2 + assignments + lab + viva;
    
    void setmarks() {}
     void displaymarks()
    {
        cout << "the final marks is " << marks << endl;
    }
};
int main()
{
    Final f;
    f.Theoretical::setmarks();
    f.Practical::setmarks();
    f.displaymarks();
}
While running the program on online gcc compiler, there is error ‘marks’ does not name a type. What went wrong? Even if:
class Evalution
{
    public:
     //float marks;
     virtual void setmarks()=0;
     void displaymarks() {}
};
And:
class Final : public Theoretical, public Practical
{
    public:
    float marks = internal1 + internal2 + assignments + lab + viva;
    
    void setmarks() {}
     void displaymarks()
    {
        cout << "the final marks is " << marks << endl;
    }
};
The program still gives me a garbage value. Help please.
 
     
    