Why am I getting an error that the member initializer 'event' does not refer to a non-static data member or base class?

Как исправить ошибку "member initializer 'event' does not name a non-static data member or base class" в классе `menu_item` в коде на C++?
  • 25 февраля 2024 г. 5:48
Ответы на вопрос 2
Это ошибка означает, что компилятор не может найти переменную с именем 'event' в вашем конструкторе класса `menu_item`. Для исправления этой ошибки убедитесь, что переменная 'event' является членом класса `menu_item` и определена перед конструктором класса. Например:

```cpp
#include <iostream>
#include <string>

class menu_item {
public:
    std::string name;
    int price;
    std::string event; // объявление переменной 'event' как члена класса

    menu_item(std::string n, int p, std::string e) : name(n), price(p), event(e) {}
};

int main() {
    menu_item item("Item1", 10, "Event1");
    std::cout << "Name: " << item.name << std::endl;
    std::cout << "Price: " << item.price << std::endl;
    std::cout << "Event: " << item.event << std::endl;

    return 0;
}
```

В этом примере переменная 'event' объявлена в классе `menu_item` как член класса перед конструктором. Исправив это, ошибка не должна появляться.
Я исправил твой код чтобы он работал: 
#pragma once
#ifndef  __MENU_ITEM__
#define __MENU_ITEM__
#include <iostream>
#include <string>
#include <functional>

class menu_item
{
private: 
    std::string _name;

public: 
    menu_item(std::string name, std::function<void()> func) : _name(name), event(func)
    {
       
    }
    std::function<void()> event;
    
    std::string const& name = _name;
};

#endif


Но я не очень понял прикола с константной ссылкой на _name. Зачем тебе это?
Похожие вопросы