Как исправить производный класс, сообщающий об ошибке «объявление не имеет класса хранения или спецификатора типа»? - PullRequest
2 голосов
/ 10 июня 2019

Я пытаюсь инициализировать переменную базового класса в производном классе, но вместо этого мне выдается ошибка:

 "this declaration has no storage class or type specifier"

Я возился с наследованием C ++ и производными классами в Visual Studio. Я сделал основной класс "Food" с protected переменными и хочу получить класс "Bread"

При попытке инициализировать указанные переменные в «Bread» VS выдает ошибку. Я чувствую, что это действительно простая проблема, которую я как-то пропустил.

#include <string>
using namespace std;

class Food 
{
protected:
    string name;
    int cost;
    int calories;

public:
    Food(string name, int cost, int calories) {
    }
};

class Bread : public Food 
{
private:
    name = "";
    cost = 5;
    calories = 200;
public:

};

Я бы исключил инициализацию переменных Bread: name как "" (пусто), cost как "5", calories как "200".

Вместо этого выводится ошибка:

"this declaration has no storage class or type specifier"

1 Ответ

4 голосов
/ 10 июня 2019

Я пытаюсь инициализировать переменную базового класса в производном классе!

Прежде всего, инициализируйте элементы в конструкторе базового класса Food, который вы предоставили.

Food(std::string name, int cost, int calories)
    : name{ name }
    , cost{ cost }
    , calories{ calories }
{}

Затем необходимо инициализировать члены базового класса в списке инициализатора *1001* члена конструктора производного класса Bread:

class Bread : public Food 
{
public:
    Bread()
        :Food{ "", 5, 200 }
    {}
};

, который инициализирует Food членов

name = ""
cost = 5
calories = 200
...