Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 1 / 1
Регистрация: 06.04.2021
Сообщений: 7
1

Создание обьекта шаблонного класса в операторе switch

06.04.2021, 22:37. Показов 1077. Ответов 1

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Необходимо создать массив объектов шаблона класса в switch'е, при этом Visual'ка жалуется что самого объекта из switch'а не видно. Вот упрощенный мой код:

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
template <class T>
class NewChar {
 private: T * elems;
 
 public:
  // Methods, operators, etc.
}
 
int main(){
  int count = 0;
  cin >> count;
 
  int choice = 0;
  cout << "Choose class type:\n 1.Int\n 2.Double\n 3.Char\n";
  cin >> choice;
  
  // Выбор нужного типа данных
  switch (choice){
  case 1:
     NewChar<int> * list = new NewChar<int>[count];
     break;
  case 2:
     NewChar<double> * list = new NewChar<double>[count];
     break;
  case 3:
     NewChar<char> * list = new NewChar<char>[count];
     break;
  default:
     cout << "Invalid class type.\n";
     return 0;
  }
 
  // Вот здесь используется list и компилятор требует его существования
  for (int i = 0; i < count; i++) list[i].Input();
  {...}
  for (int i = 0; i < count; i++) list[i].Output();
 
  {...} // Удаление list
  return 0;  
}
Компилятор пишет что указатель list не определен.

Я не сильно искушен в программировании и гугл не помог. Благодарю заранее.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2021, 22:37
Ответы с готовыми решениями:

Функция возвращающая обьект шаблонного класса
Добрый день. Столкнулся с такой проблемой: Имеется два класса, Line и Circle. Оба наследуются от...

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); }...

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

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

1
Мозгоправ
1744 / 1038 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
07.04.2021, 02:06 2
Лучший ответ Сообщение было отмечено Bipolar Proger как решение

Решение

Bipolar Proger, для начала, у вас переменная list переопределяется в case 2 и case 3. Т.е. такой финт со switch не прокатит в принципе.

К тому же, переменная list, которая таки успешно создаётся в case 1, умрёт при выходе из той зоны видимости, где она была создана. Т.е. при выходе из оператора switch. Поэтому Студия вам и показывает, что в строке 34 переменная list уже не определена.

Что-то посоветовать, как надо сделать, сложно, поскольку исходное задание неизвестно.

Добавлено через 9 минут
Единственно, что можно сделать, это так:
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
#include <iostream>
 
using namespace std;
 
template <class T>
class NewChar {
private: T *elems;
 
public:
    // Methods, operators, etc.
    void Input() {}
    void Output() {}
};
 
int main() {
    int count = 0;
    cin >> count;
 
    int choice = 0;
    cout << "Choose class type:\n 1.Int\n 2.Double\n 3.Char\n";
    cin >> choice;
 
    // Выбор нужного типа данных
    switch (choice) {
        case 1:
        {
            NewChar<int> *list = new NewChar<int>[count];
 
            for (int i = 0; i < count; i++) list[i].Input();
            {}
            for (int i = 0; i < count; i++) list[i].Output();
            {} // Удаление list
 
            break;
        }
        case 2:
        {
            NewChar<double> *list = new NewChar<double>[count];
 
            for (int i = 0; i < count; i++) list[i].Input();
            {}
            for (int i = 0; i < count; i++) list[i].Output();
            {} // Удаление list
 
            break;
        }
        case 3:
        {
            NewChar<char> *list = new NewChar<char>[count];
 
            for (int i = 0; i < count; i++) list[i].Input();
            {}
            for (int i = 0; i < count; i++) list[i].Output();
            {} // Удаление list
 
            break;
        }
        default:
            cout << "Invalid class type.\n";
            return 0;
    }
 
    return 0;
}
т.е. всю работу с делать внутри case.
1
07.04.2021, 02:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2021, 02:06
Помогаю со студенческими работами здесь

Условие в операторе switch
Всем привет, есть коД: switch(TYPE) { case 1: total = number1 + number2; ...

Условие в операторе switch
как записать условие х-у&gt;0 с помощью case

Сортировка в операторе switch
Здравствуйте! Никак не могу наладить сортировку в операторе для таблицы. Указывая поле сортировки...

Ошибка в операторе Switch
Почему тут ошибки public class TestClass { public static void main(String args) { ...

Ошибка в операторе switch
Где ошибка почему switch не работет? #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace...

Enum ломается в операторе Switch
Добрый вечер форумчане, нужен ваш бесценный совет для начинающего программиста. Есть в задании...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru