Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 07.11.2022
Сообщений: 23

Функции и переменные не являются членами класса

30.03.2024, 12:26. Показов 8849. Ответов 4

Студворк — интернет-сервис помощи студентам
Всем добрый день, прохожу сейчас множественное наследование в С++. Написала оба базовых класса и подключила к ним класс-наследник. Но выдает ошибки о том, что в одном из базовых классов методы и переменные не являются членами этого класса, хотя всё подключено. Плюс почему-то конкретно в этом классе были ошибки со string, но во всех других файлах проекта таких ошибок не наблюдалось.

Базовый класс 1
Hardware.h
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#pragma once
 
 
#include <iostream>
#include <string>
#include "Country.h"
 
 
using namespace std;
 
class hardware {
 
private:
 
 
    char* name;
    string model;
    double price;
    Country country;
    static int count;
 
 
    void set_name(const char* name);
 
protected:
    virtual void display_header()const;
    virtual void display_info()const;
public:
    //������������
    hardware(const char* name1, string model1, double price1, Country country1);
    hardware(const hardware& other);
    bool operator<(const hardware& other) const {
        return this->price < other.country;
    }
 
    ~hardware();
 
    bool operator==(Country country) const {
        return country == this->country;
    }
 
    //����������
 
    //������ 
    virtual void display()const;
 
    virtual const char* getName() const;
    virtual string getModel()const;
    virtual double getPrice()const;
    virtual Country getCountry()const;
    static int getCount();
 
};


Hardware.cpp
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
 
 
#include "Hardware.h"
 
 
using namespace std;
 
//������������
int hardware::count = 0;
 
void hardware::set_name(const char* name1) {
    delete[] name;
    int b = strlen(name1) + 1;
    name = new char[b];
    strcpy_s(name, b, name1);
}
 
hardware::hardware(const char* name1, string model1, double price1, Country country1) {
    set_name(name1);
    model = model1;
    price = price1;
    country = country1;
    //count++;
}
 
hardware::hardware(const hardware& other)
 
    :hardware(other.name, other.model, other.price, other.country) {
 
}
 
//����������
hardware::~hardware() {
    count--;
    delete[] name;
}
 
 
void hardware::display_header() const
{
    cout << "-------------------------------------------" << endl;
    cout << "Hardware" << endl;
    cout << "-------------------------------------------" << endl;
}
 
void hardware::display_info() const
{
}
 
//������
void hardware::display()const {
    display_header();
    cout << "Name: " << name << endl;
    cout << "Model: " << model << endl;
    cout << "Price: $" << price << endl;
    cout << "Country: ";
    switch (country) {
    case USA:
        cout << "USA" << endl;
        break;
    case China:
        cout << "China" << endl;
        break;
    case Russia:
        cout << "Russia" << endl;
        break;
    case Japan:
        cout << "Japan" << endl;
        break;
    case Germany:
        cout << "Germany" << endl;
        break;
    }
 
    display_info();
 
}
 
 
 
const char* hardware::getName()const {
    return name;
}
 
string hardware::getModel()const {
    return model;
}
 
double hardware::getPrice()const {
    return price;
}
 
Country hardware::getCountry()const {
    return country;
}
 
int hardware::getCount() {
    return count;
}





Базовый класс 2
Software.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma once
#include <iostream>
#include <string>
class Software {
private:
    string SystemSoftware;
    string OperatingSystem;
protected:
    virtual void display_header()const;
    virtual void display_info()const;
public:
    Software(string SystemSoftware1, string OperatingSystem1) {
        SystemSoftware = SystemSoftware1;
        OperatingSystem = OperatingSystem1;
    };
    Software(const Software& other) : Software(other.SystemSoftware, other.OperatingSystem)
    {
    };
    ~Software();
    virtual string Is_SystemOperating()const;
    virtual string get_OperatingSystem()const;
    virtual void display()const;
};



Software.cpp
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "Software.h"
using namespace std;
 
void Software::display_header() const
{
    cout << "-------------------------------------------" << endl;
    cout << "Software" << endl;
    cout << "-------------------------------------------" << endl;
}
 
void Software::display_info() const
{
}
 
void Software::display() const
{
    display_header();
    cout << "Is system software exist?: " << SystemSoftware;
    cout << "Which one operating system?(if exist): " << OperatingSystem;
    display_info();
}
 
 
Software::~Software()
{
}
 
string Software::Is_SystemOperating() const
{
    return SystemSoftware;
}
 
string Software::get_OperatingSystem() const
{
    return OperatingSystem;
}



Класс-наследник
IODevice.h
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#pragma once
#include "hardware.h"
#include "Software.h"
class IODevice :
    public hardware, public Software
{
private:
    string IODevice_function;
    string IODevice_type;
 
 
protected:
    virtual void display_header()const override;
    virtual void display_info()const override;
public:
    IODevice(const char* name1, string model1, double price1, Country country1, string SystemSoftware1, string OperatingSystem1, string IODevice_function1, string IODevice_type1) :hardware(name1, model1, price1, country1), Software(SystemSoftware1, OperatingSystem1) {
        IODevice_function = IODevice_function1;
        IODevice_type = IODevice_type1;
    };
    IODevice(const IODevice& other) :hardware(other), Software(other) {
        IODevice_function = other.IODevice_function;
        IODevice_type = other.IODevice_type;
    };
 
 
    virtual void display()const override;
    string get_IODevice_function()const;
    string get_IODevice_type()const;
 
};


IODevice.cpp
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "IODevice.h"
 
void IODevice::display()const {
 
    hardware::display();
    Software::display();
 
}
 
string IODevice::get_IODevice_type()const
{
    return IODevice_type;
}
 
string IODevice::get_IODevice_function()const
{
    return IODevice_function;
}
void IODevice::display_header() const
{
    cout << "------------------------------------" << endl;
    cout << "IODevice" << endl;
    cout << "-------------------------------------------" << endl;
}
 
void IODevice::display_info() const
{
    cout << "Input / output: " << IODevice_type << "\n";
    cout << "Function of hardware: " << IODevice_function << " " << "\n";
}
Миниатюры
Функции и переменные не являются членами класса  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2024, 12:26
Ответы с готовыми решениями:

Конструктор внутри класса, поля которого являются членами другого класса
Вот фрагмент кода. class Class_Figure { Class_Triangle tr1; Class_Circle cr1; public: Class_Figure() { } void...

Определите шаблон структуры, членами которого являются переменные типа double, int и массив из 3-х символов
Определите шаблон структуры, членами которого являются переменные типа double, int и массив из 3-х символов. С помощью этого шаблона...

Создать класс эллипсов. Членами класса являются длины полуосей эллипса
Создать класс эллипсов. Членами класса являются длины полуосей эллипса. методами класса являются: ввод эллипса с клавиатуры; ...

4
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,235
30.03.2024, 20:36
Цитата Сообщение от weewew Посмотреть сообщение
о выдает ошибки о том, что в одном из базовых классов методы и переменные не являются членами этого класса,
Во-первых, я подозреваю, что вы нас обманываете. То, что вы привели на вашем скриншоте - это не начало списка ошибок. И изначальные - реальные - ошибки были вызваны тем, что имя string в заголовочном файле Software.h - это неизвестный идентификатор. Именно об этом вам изначально сообщил компилятор, но вы почему-то решили скрыть от нас эту информацию. Что такое string?

Во-вторых, к чему вы привели это скриншот? Ошибки - это то, что выдал вам компилятор в окне Output во время компиляции. Что вам сказал компилятор?
0
0 / 0 / 0
Регистрация: 07.11.2022
Сообщений: 23
04.04.2024, 19:19  [ТС]
Я указала, что конкретно в этом файле программа отказывается считывать тип данных string, даже при явном указании библиотеки. Вот что выводится в окне вывода
Миниатюры
Функции и переменные не являются членами класса  
0
фрилансер
 Аватар для Алексей1153
6462 / 5670 / 1131
Регистрация: 11.10.2019
Сообщений: 15,100
04.04.2024, 19:53
Цитата Сообщение от weewew Посмотреть сообщение
программа отказывается считывать тип данных string
так тип не определён же, в C++ нет такого встроенного типа

Цитата Сообщение от weewew Посмотреть сообщение
#pragma once
#include <iostream>
#include <string> // тут есть тип std::string
class Software {
private:
//а тут тип неизвестен
    string SystemSoftware;
    string OperatingSystem;
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,235
05.04.2024, 04:54
Цитата Сообщение от weewew Посмотреть сообщение
даже при явном указании библиотеки
Какой "библиотеки"? Что это за тип данных - string?

Цитата Сообщение от weewew Посмотреть сообщение
Вот что выводится в окне вывода
Опять "в окне вывода" приведен конец, а не начало списка ошибок... Какое слово в фразе "начало списка ошибок" вам не понятно? Сколько можно повторять одно и то же?

Также, к чему здесь эти скриншоты? Вы не умеете копировать текст?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2024, 04:54
Помогаю со студенческими работами здесь

Создать класс точек впространстве. Членами класса являются координаты точки в цилиндрической системе координат
Создать класс точек впространстве. Членами класса являются координаты точки в цилиндрической системе координат. Методами классаесть: ввод...

Как можно использовать переменные класса в static функции этого класса
Пишу окно на glfw, хочу чтобы при изменении размеров сразу перерисовывалась чёрная часть окна. Для этого использую...

Переменные из функции класса в функцию другого класса
Подскажи пожалуйста,как с класса Convector передать в класс Filter одержанный Bitmap и переменные? Convector::Convector() { ...

Описать процедуру печати таблицы, параметрами которой являются функции-процедурные переменные
Нужно описать процедуру печати таблицы, параметрами которой являются функции-процедурные переменные, вычисляют: tg x, ctg x x и y...

Описать процедуру печати таблицы, параметрами которой являются функции-процедурные переменные
описать процедуру печати таблицы, параметрами которой являются функции-процедурные переменные, вычисляют: sin x + tg x; sin x - tg x. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru