Search code examples
c++classsyntax-errorcomposition

Code Error: "Is not a nonstatic data member or base class of"


I have three classes in C++: Project, Supervisor, Date. I am trying to use composition, but the error I am encountering the following error message:

"Class Date

"Date" is not a nonstatic data member or base class of class "Project"". 

This error occurs on this line, in Project.cpp:

Project::Project(char projectName, int sDay, int sMonth, int sYear, char supervisorName)
    : Date(sDay, sMonth, sYear), 
    : Supervisor(supervisorName)

Complete Code:

Date.h:

#pragma once

class Date
{
public:
    Date(int = 1, int = 1, int = 1);
    void setDate(int, int, int);
    void setDay(int);
    void setMonth(int);
    void setYear(int);
    ~Date();
private:
    int day, month, year;
};

Date.cpp

#include "stdafx.h"
#include "Date.h"

Date::Date(int a, int b, int c)
{
    setDate(a, b, c);
}

void Date::setDate(int d, int m, int y)
{
    setDay(d);
    setMonth(m);
    setYear(y);
}

void Date::setDay(int da)
{
    day = da;
}

void Date::setMonth(int mo)
{
    month = mo;
}

void Date::setYear(int ye)
{
    year = ye;
}

Date::~Date()
{
}

Supervisor.h:

#pragma once

class Supervisor
{
public:
    Supervisor(char);
    ~Supervisor();
private:
    char name;
};

Supervisor.cpp:

#include "stdafx.h"
#include "Supervisor.h"


Supervisor::Supervisor(char n)
{
    name = n;
}

Supervisor::~Supervisor()
{
}

Project.h:

#pragma once
#include "Supervisor.h"
#include "Date.h"

class Project
{
public:
    Project(char, int, int, int, char);
    void setProject(char, int, int, int, char);
    ~Project();
private:
    char pname;
    Date startDate;
    Supervisor supervisor;
};

Project.cpp:

#include "stdafx.h"
#include "Project.h"
#include "Supervisor.h"
#include "Date.h"

Project::Project(char projectName, int sDay, int sMonth, int sYear, char supervisorName)
    : Date(sDay, sMonth, sYear), 
    : Supervisor(supervisorName)
{
    setProject(projectName, sDay, sMonth, sYear, supervisorName);
}

void Project::setProject(char pN, int d, int m, int y, char sN)
{
    pname = pN;
    startDate = (d, m, y);
    supervisor = sN;
}

Project::~Project()
{
}

Solution

  • The error message is reasonably self explanatory, you are using the syntax for passing arguments to the constructor of the base class of your class but the class names you are using aren't base classes of the current class.

    To initialise class members use the name of the member not its class:

    Project::Project(char projectName, int sDay, int sMonth, int sYear, char supervisorName)
        : statrtDate(sDay, sMonth, sYear), 
        : supervisor(supervisorName)
    {
        setProject(projectName, sDay, sMonth, sYear, supervisorName);
    }