1

Тема: Почав вивчати ООП і наткнувся на проблему)Допоможіть виправити помилку

Хто підкаже чому у функції charact при ініціалізації, підкреслює дані,які мали б відноситись до типу char і вибиває помилку,що ідентифікатор невизначений.

Код:

#include <iostream>
#include <cstring>
using namespace std;
class Building
{
private: char name, style, description, year, month, day;
public:
    void message()
    {
        cout << "LET`S SEE NEW BUILDING" << endl;
    };
    void charact(char name_building, char style_building, char characteristics_building, int age_date, int month_date, int day_date)
    {
        name = name_building;
        style = style_building;
        description = characteristics_building;
        year = age_date;
        month = month_date;
        day = day_date;
    };
    void get()
    {
        cout << "THE BUILDING NAME IS - " << name << endl;
        cout << "THE BUILDING STYLE IS - " << style << endl;
        cout << "THE BUILDING DESCRIPTION  - " << description << endl;
        cout << "THE BUILDING AGE - " << year<<"."<<month<<"."<<day<< endl;
    };
};

int main()
{
    Building St_Yura_Church;
    St_Yura_Church.message();
    St_Yura_Church.charact(Yura,baroko,style, 1876, 9, 30);
    St_Yura_Church.get();
    Building Big_Ben;
    Big_Ben.message;
    Big_Ben.charact(BIG_BEN,clock,garden,1999,9,3 );
    Big_Ben.get();

    system("pause");
    return 0;
}
Post's attachments

1111111111111111jpg.jpg 118.42 kb, 139 downloads since 2018-02-24 

2

Re: Почав вивчати ООП і наткнувся на проблему)Допоможіть виправити помилку

Я не шарю в тому вашому Сі з ооп, але може слід використовувати не char (що є один символ) а вказівник, char*?

Подякували: METALICOS1

3

Re: Почав вивчати ООП і наткнувся на проблему)Допоможіть виправити помилку

я вже пробував, мені не получалось(

4

Re: Почав вивчати ООП і наткнувся на проблему)Допоможіть виправити помилку

Ну давате розбиратись

‘BIG_BEN’ was not declared in this scope

Почнемо з постановки задачи, що ви взагалі хочете отримати? Яку поведінку програми Ви очікуєте?

Подякували: METALICOS1

5

Re: Почав вивчати ООП і наткнувся на проблему)Допоможіть виправити помилку

Дивіться що я зробив, по перше взяв в кавички

St_Yura_Church.charact("Yura","baroko","style", 1876, 9, 30);

і в другому виклику теж.
По друге додав скобки

Big_Ben.message();

і таки додав посилання на масив

...char *name_building, char *style_building, char *characteristics_building,...

і тут

private: char *name, *style, *description, year, month, day;

Code form Ideone

Подякували: METALICOS, koala2

6

Re: Почав вивчати ООП і наткнувся на проблему)Допоможіть виправити помилку

Вибачаюсь,що морочив вам голови) просто я ще новачок,так сказати. Але вже виправив все , все працює. Я зайшов ,а тут готово, дуже дякую за допомогу.

#include <iostream>
#include <cstring>
using namespace std;
class Building
{
private: char *name, *style, *description, *year, *month, *day;
public:
    void message()
    {
        cout << "LET`S SEE NEW BUILDING" << endl;
    };
    void charact(char *name_building, char *style_building, char *characteristics_building, char *age_date, char *month_date, char *day_date)
    {
        name = name_building;
        style = style_building;
        description = characteristics_building;
        year = age_date;
        month = month_date;
        day = day_date;
    };
    void get()
    {
        cout << "THE BUILDING NAME IS - " << name << endl;
        cout << "THE BUILDING STYLE IS - " << style << endl;
        cout << "THE BUILDING DESCRIPTION  - " << description << endl;
        cout << "THE BUILDING AGE - " << year<<"."<<month<<"."<<day<< endl;
    };
};

int main()
{
    Building St_Yura_Church;
    St_Yura_Church.message();
    St_Yura_Church.charact("BIG_BAN","baroko","style", "1876", "09", "30");
    St_Yura_Church.get();
    Building Big_Ben;
    Big_Ben.message();
    Big_Ben.charact("BIG_BEN","clock","garden","1999","09","03" );
    Big_Ben.get();

    system("pause");
    return 0;
}
Подякували: Chemist-i1

7

Re: Почав вивчати ООП і наткнувся на проблему)Допоможіть виправити помилку

1. В сучасних компіляторах таке може і не пройти (залежить від налаштувань), бо стрічковий літерал (в лапках) має тип const char[], а ви передаєте його як просто char *. Тобто щонайменше купу попереджень ви мали отримати.
2. Раджу в C++ використовувати стрічковий тип std::string (std::wstring, коли будете серйозніше працювати із іншими мовами).
3. Ваша функція charact є, по суті, конструктором - то й робіть конструктор.

Подякували: METALICOS, Chemist-i2