Кодовые блокировки сообщают мне об ошибке: в «классе» нет члена с именем «x»

#c #class #object #codeblocks #header-files

Вопрос:

В настоящее время я изучаю классы и объекты в C . Я написал исходный код и файл заголовка на C в кодовых блоках. Они находятся в одной папке на моем Mac.

Когда я пытаюсь создать и запустить любой файл, CodeBlocks сообщает мне «ошибка: в «классе»нет члена с именем «x»».

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

Губная помада2.ч

 #ifdef LIPSTICKWAREHOUSE2_H_INCLUDED
#define LIPSTICKWAREHOUSE2_H_INCLUDED

using namespace std;

enum Brand
{
    Mac,
    Glossier,
    EsteeLauder
};

enum Color
{
    red,
    pink,
    nude,
    black,
    brown,
    gold,
    silver,
    other
};

enum Formula
{
    matte,
    sheer,
    satin,
    glossy
};

class Lipstick
{
public:
    Brand Name;
    Color LipColor;
    Color Tube;
    Formula Effect;
    float Price;
    int Rating;
};

void reccomendation(string words)
{
    if (Rating <= 3)
    {
        cout << "I would rethink this lipstick!" << endl;
    }
    else
    {
        cout << "I would recommend this lipstick!" << endl;
    }
}

#endif // LIPSTICKWAREHOUSE2_H_INCLUDED

 

main.cpp

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

using namespace std;

int main()
{
    Lipstick FavBrand;
    FavBrand.Brand = Mac;
    FavBrand.Color = red;
    FavBrand.Formula = matte;
    FavBrand.Tube = black;
    FavBrand.Price = 19.00;
    FavBrand.Rating = 5;
    
    Lipstick WorBrand;
    WorBrand.Brand = Glossier;
    WorBrand.Color = other;
    WorBrand.Formula = sheer;
    WorBrand.Tube = other;
    WorBrand.Price = 18.00;
    WorBrand.Rating = 3;
    
    cout << "Buyer: Should I buy the " << FavBrand.Brand << FavBrand.Color << FavBrand.Formula << "lipstick?" << endl;
    cout << "Seller: " << FavBrand.reccomendation << endl;
    cout << "Buyer: Should I buy the " << WorBrand.Brand << WorBrand.Color << WorBrand.Formula << "lipstick?" << endl;
    cout << "Seller: " << WorBrand.reccomendation << endl;
    return 0;
}

 

Ошибки

 Line 9: No member named 'Brand' in 'Lipstick'
Line 10: No member named 'Color' in 'Lipstick'
Line 11: No member named 'Formula' in 'Lipstick'
Line 17: No member named 'Brand' in 'Lipstick'
Line 18: No member named 'Color' in 'Lipstick'
Line 19: No member named 'Formula' in 'Lipstick'
Line 24: No member named 'Brand' in 'Lipstick'
Line 24: No member named 'Color' in 'Lipstick'
Line 24: No member named 'Formula' in 'Lipstick'
Line 24: Reference to non-static member function must be called
Line 26: No member named 'Brand' in 'Lipstick'
Line 26: No member named 'Color' in 'Lipstick'
Line 26: No member named 'Formula' in 'Lipstick'
Line 27: Reference to non-static member function must be called
 

Папка проекта

*Изд. Примечание: «.cbp» не является опечаткой. См. См. Исходный файл изображения)

 > bin
LipstickWarehouse2.cbp
LipstickWarehouse2.h
main.cpp
> obj
 

Комментарии:

1. Пожалуйста, опубликуйте свой код в виде текста, а не изображений. Для людей, которые по той или иной причине не могут видеть изображения, ваш вопрос остается без ответа.

2. В качестве общего руководства по стилю полезно, если ваша заглавная буква различает типы и значения. Поэтому, если имена ваших классов и функций начинаются с заглавной буквы, подумайте о том, чтобы имена переменных начинались как минимум со строчной буквы.

3. Что, черт возьми, такое файл «.cbp»?

4. Проект @Casey CodeBlocks?

5. @PaulSanders Ну, это совсем не будет путаницей между .cpp и .cbp крошечным шрифтом.

Ответ №1:

Ошибка появляется из-за того, что вы пытаетесь получить доступ к членам класса по их типам (марка, цвет и т.д.) Вместо имен (Имя, цвет губ, …)
Измените свой код в main() следующим образом:

 Lipstick FavBrand;
FavBrand.Name = Mac;
...
 

Ответ №2:

 class Lipstick
{
public:
    Brand Name;
    Color LipColor;
    Color Tube;
    Formula Effect;
    float Price;
    int Rating;
};
 

Здесь вы объявляете элемент с именем Name , который имеет тип Brand . Чтобы получить доступ к этому, вам нужно сделать

     Lipstick FavBrand;
    FavBrand.Name = Mac;
 

Обратите внимание, что мы используем Name здесь вместо Brand «потому Name что» имя члена, тогда Brand как это его тип. Для доступа ко всем другим участникам необходимо использовать их имена, а не их типы.