3 / 2 / 1
Регистрация: 14.10.2012
Сообщений: 50

Объекты классов не видны во вложенной функции одной из классов

06.07.2018, 19:48. Показов 1593. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Такая вот проблема. Есть функция play() класса Game, где создаются объекты классов Game, Character, Battle. В ней я обращаюсь к еще одной функции класса Game roadjourney, указываю в ней объекты классов в качестве параметров, но дальше в этой функции не могу получить доступ к переменным этих объектов. При этом в самой функции play() я нормально получаю доступ к переменными классов (строки 92 и 94, например). Ошибка компиляции пишет:
error: 'p' was not declared in this scope
Это на 100 строке. Если закоментировать, то компилируется нормально. Для краткости привел лишь часть кода (работающий с неработающей 100 строке):
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <ctime>
#include <vector>
#include <windows.h>
#include <locale.h>
#include <sstream>
#include <iomanip>
#include <limits>
#ifdef _WIN32
#define CLEAR "cls"
#else //In any other OS
#define CLEAR "clear"
#endif
using namespace std;
void ClearScreen();
class Character;
class Battle;
class Game {
public:
string gamelogs;
string gamelogstats;
vector <string> gamelog;
void play();
void roadjourney(Battle &, Character &, Character &);
void bardisplay(Character &, Character &);
void bardisplay(Character &);
void osstostring( std::ostream& s );
void osstostring2( std::ostream& s );
void showgamelogs();
};
 
void Game::osstostring( std::ostream& s ) {    gamelogs += dynamic_cast<std::ostringstream&>(s).str();  }
void Game::osstostring2( std::ostream& s ) {    gamelogstats += dynamic_cast<std::ostringstream&>(s).str();  }
void Game::showgamelogs()
{
    cout << gamelogstats << gamelogs;
}
class Character : public Game {
public:
double accuraty;
double agility;
double endurance;
int hitpoints;
int experience;
int level;
double speed;
double strength;
int distance;
string object;
Character (string o) : object(o)
{
    cout << "Создался объект " << object << endl;
}
~Character()
{
    cout << "Разрушился объект " << object << " с хр " << hitpoints << endl;
}
void generatecharacter();
void levelingcharacter();
};
class Battle : public Game {
private:
public:
 string object;
 Battle (string o) : object(o)
{
    cout << "Создался объект " << object << endl;
}
 ~Battle()
{
    cout << "Разрушился объект " << object << endl;
}
void callopponent(Game *,Character &, Character &);
void battlelogic(Character &, Character &);
void battledistance(Character &, Character &);
void battlehit(Character &, Character &);
void battledamage(Character &, Character &);
void surrendlogic(Character &, Character &);
void opponentTurn(Character &, Character &);
};
 
void Game::play()
{
    Character p("Player");
    p.generatecharacter();
    Battle b("Battle");
    Character o("Oppo");
    while (p.hitpoints > 0)
    {
        cout << b.object << " " << p.object << " " << o.object;
        roadjourney(b, p, o);
        cout << b.object << " " << p.object << " " << o.object;
    }
}
 
void Game::roadjourney(Battle &, Character &, Character &)
{
    cout << p.object << endl;
    int n;
    cin >> n;
//    int fate = (rand() % 3) + 1;
//    switch (fate)
//    {
//    case 1:
//        b.callopponent(this, p, o);
//        break;
//    case 2:
//        cout << "Вы ходите дальше" << endl;
//        break;
//    case 3:
//        cout << "Вы находите сокровище" << endl;
//        break;
//    }
}
 
void Character::generatecharacter()
{
    hitpoints = 100;
    for (int c = 0; c < 30; ++c)
    {
    int ch = (rand() % 5) + 1;
    switch (ch)
    {
    case 1:
    strength += 1;
    break;
    case 2:
    agility += 1;
    break;
    case 3:
    speed += 1;
    break;
    case 4:
    accuraty += 1;
    break;
    case 5:
    endurance += 1;
    }
    }
}
 
int main()
{
   setlocale(LC_ALL,"Rus");
   srand(time(0));
   Game game;
   game.play();
}
Не могу понять как исправить. Только осваиваю C++.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.07.2018, 19:48
Ответы с готовыми решениями:

Преобразования объектов классов в объекты других классов
Задача типа обмен валют. Нужно конвертировать старый фунт стерлинг(фунт, шиллинг и пенсы) в доллары и обратно, по курсу 1 фунт = 50...

Виртуальные функции (создать массив указателей на объекты трех классов)
Задание: создать массив указателей на объекты трех классов. Метод Show почему-то не переопределяется. В данном коде вводится 3 элемента в...

Controls не видны из классов?
Собственно, есть приложение и есть класс. Прописываем в классе using System.Windows.Controls.TextBox; Ошибка - Имя типа или...

1
Модератор
Эксперт С++
 Аватар для zss
13759 / 10955 / 6487
Регистрация: 18.12.2011
Сообщений: 29,213
06.07.2018, 20:36
Лучший ответ Сообщение было отмечено Рольф как решение

Решение

p - Это локальная переменная, объявленная в функции play:
Цитата Сообщение от Рольф Посмотреть сообщение
C++
1
2
3
4
void Game::play() 
{ 
      Character p("Player");
...
соответственно:
C++
1
2
3
void Game::roadjourney(Battle &, Character &, Character &)
{
    cout << p.object << endl;
тут p не видна.
Исправить
C++
1
void Game::roadjourney(Battle &, Character & p, Character &)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.07.2018, 20:36
Помогаю со студенческими работами здесь

Настройка стилей для вложенной таблицы без использования классов
Имеется таблица (&lt;table&gt;) с определенным стилем x. В ней должна быть вложенная таблица со стилем y. Но дело в том, что вложенная...

С помошью одной функции посчитать результат для двух классов
//С помощью функции friend obrab подсчитать сумму матрицы и массива. Ошибки выдаёт не опйму почему. #pragma once class matriza ...

Почему в приведенном коде переменные видны для всех классов?
Сегодня объяснял классы сыну. И наткнулся на следующее (и в WDE и в IDE). Почему этот код работает? PascalABC не бдит за private и...

Как в библиотеке классов сделать так, чтобы внутри библиотеки были видны Button
Есть код: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; ...

Объекты и экземпляры классов
Здравствуйте, я читаю книгу &quot;Изучаем C#&quot; 3-e издание, Эндрю Стиллмена и Дженнифер Грина, так же посмотрел много видео уроков по этой теме,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Введение в Q# - язык квантовых вычислений от Microsoft
EggHead 19.05.2025
Microsoft вошла в гонку технологических гигантов с собственным языком программирования Q#, специально созданным для разработки квантовых алгоритмов. Но прежде чем погружаться в синтаксические дебри. . .
Безопасность Kubernetes с Falco и обнаружение вторжений
Mr. Docker 18.05.2025
Переход организаций к микросервисной архитектуре и контейнерным технологиям сопровождается лавинообразным ростом векторов атак — от тривиальных попыток взлома до многоступенчатых кибератак, способных. . .
Аугментация изображений с Python
AI_Generated 18.05.2025
Собрать достаточно большой датасет для обучения нейронной сети — та ещё головная боль. Часами вручную размечать картинки, скармливать их ненасытным алгоритмам и молиться, чтобы модель не сдулась при. . .
Исключения в Java: советы, примеры кода и многое другое
Javaican 18.05.2025
Исключения — это объекты, созданные когда программа сталкивается с непредвиденной ситуацией: файл не найден, сетевое соединение разорвано, деление на ноль. . . Список можно продолжать до бесконечности. . . .
Как сделать SSO (Single Sign-On) в C# приложении
stackOverflow 18.05.2025
SSO — это механизм, позволяющий пользователю пройти аутентификацию один раз и получить доступ к нескольким приложениям без повторного ввода учетных данных. Вы наверняка сталкивались с ним, когда. . .
Kubernetes с Apache Flink для обработки данных в реальном времени
Mr. Docker 17.05.2025
Kubernetes — это целая философия управления распределёнными приложениями. В отличие от "примитивных" решений вроде Docker Swarm, K8s (как его ласково называют в тусовке DevOps-инженеров) предлагает. . .
Использование декораторов в Python
py-thonny 17.05.2025
Если вы когда-нибудь задумывались о том, как красиво расширить функциональность кода без лишней возни и дублирования, декораторы в Python — та самая волшебная палочка, которую вы искали. По сути, это. . .
Реализация многопоточных сетевых серверов на Python
py-thonny 16.05.2025
Когда сталкиваешься с необходимостью писать высоконагруженные сетевые сервисы, выбор технологии имеет критическое значение. Python, со своей элегантностью и высоким уровнем абстракции, может. . .
C# и IoT: разработка Edge приложений с .NET и Azure IoT
UnmanagedCoder 16.05.2025
Мир меняется прямо на наших глазах, и интернет вещей (IoT) — один из главных катализаторов этих перемен. Если всего десять лет назад концепция "умных" устройств вызывала скептические улыбки, то. . .
Гибридные квантово-классические вычисления: Примеры оптимизации
EggHead 16.05.2025
Гибридные квантово-классические вычисления — это настоящий прорыв в подходах к решению сложнейших вычислительных задач. Представьте себе союз двух разных миров: классические компьютеры, с их. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru