2016-05-02 2 views
-3

Я получаю this->C++ Ошибка компиляции базового класса вопрос

ошибки -type «Ship» не является прямой базой «CruiseShip'-

Я не могу понять это. Здесь происходит ошибка, которую я предполагаю. Я не уверен, что догадываюсь, как я должен назвать базовый класс?

Cruiseship :: Cruiseship (строка п, строка у, внутр р): Ship (п, у)

CruiseShip.cpp

#include "CruiseShip.h" 
#include "Ship.h" 

#include <iostream> 

using namespace std; 

Ship s; 
    CruiseShip::CruiseShip(string n, string y, int p) : Ship(n,y) 
    { 
    passengers=p; 
    } 
    //A print function that overrides the print function in the base class. 
    //The CruiseShip class's print function should display only the ship's 
    //name and the maximum number of passengers. 
    void print() 
    { 
    cout<<"Name: "<<s.getName()<<"\nMaximum passengers:"<<passengers<<endl; 
    cout<<"-------------------------"<<endl; 
    } 

CruiseShip.h

#ifndef CRUISESHIP_H 
#define CRUISESHIP_H 
#include <string> 
using namespace std; 

class Ship; 

class CruiseShip{ 
    private: 
     int passengers; 
     Ship::Ship s; 
    public: 
    CruiseShip(string, string, int); 
    virtual void print(); 
}; 

#endif 

Ship.cpp

#include "Ship.h" 
#include <iostream> 

using namespace std; 

string name; 
string built; 

Ship::Ship(){ 

} 
Ship::Ship(string n, string b) 
{ 
    name = n; 
    built = b; 

} 
//accessors and mutators methods 
string getName() 
{ 
    return name; 
} 
string getBuilt() 
{ 
    return built; 
} 
//A virtual print function that displays 
//the ship's name and the year it was built 
void print() 
{ 
    cout<<"Name:"<<getName()<<"\nYear built:"<<getBuilt()<<endl; 
    cout<<"-------------------------"<<endl; 
} 

Ship.h

#ifndef SHIP_H 
#define SHIP_H 
#include <string> 

using namespace std; 

class Ship{ 
private: 
    string name; 
    string built; 

public: 
    Ship(); 
    Ship(string, string); 
    string getName(); 
    string getBuilt(); 
    virtual void print(); 


}; 
#endif 

ответ

2

Вы должны получить Cruiseship от корабля:

class CruiseShip : public Ship { 

это:

CruiseShip::CruiseShip(string n, string y, int p) : Ship(n,y) 
                ^^^^^^^^^^^^ 

- это вызов конструктора базового класса, но вы не получили CruiseShip from Ship, но компилятор знает, что Ship является типом класса.

+0

Итак, однажды я изменяю это _CruiseShip :: Ship (строка n, строка y, int p): Корабль (n, y) _. Мне нужно изменить конструктор в файле заголовка? –

+0

Вам нужно только извлечь из 'Ship', поэтому достаточно добавить': public Ship'. Вам также, вероятно, не нужен этот 'Ship :: Ship s;' – marcinj

+0

Вам также может понадобиться '#include" Ship.h "' в вашем заголовке круиза – marcinj

Смежные вопросы