Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2011, 15:17   #1
Fantom.as
Пользователь
 
Аватар для Fantom.as
 
Регистрация: 19.04.2010
Сообщений: 62
Восклицание Проблема с typedef.... не виден новый тип данных!

Пишу шаблон класса множество, у множеств элементы могут быть разного типа, одно, например, целочисленное, другое - строка.
Пользователю дается возможность выбрать тип, с которым ему работать.
Тип выбирается через функцию MenuType() и через свитч конкретизируется... но сразу за границей свича новый тип данных становится недоступным.
Как решить эту проблему?

вот фрагмент кода, в котором все и происходит.

Код:
switch (MenuType()) 
		{
			case 1: typedef string Type; break;
			case 2: typedef char Type;break;
			case 3: typedef int Type;break;
			case 4: typedef double Type;break;
			case 5: don=true;
		}
		
		//здесь Type уже не виден!
		Set_list<Type> A("SetA"),B("SetB"),C("SetC"),D("SetD");
		Set_list<Type>* pSet[] = { &A, &B, &C, &D };
<--<--<--Нажми на весы слева <---<---<---
Fantom.as вне форума Ответить с цитированием
Старый 29.11.2011, 15:48   #2
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию

выноси тайпдеф наружу. он виден только в текущем блоке кода
Kukurudza вне форума Ответить с цитированием
Старый 29.11.2011, 15:51   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Fantom.as

В Си/С++ тип переменной не может быть задан в ран-тайме.
Rififi вне форума Ответить с цитированием
Старый 29.11.2011, 17:04   #4
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Можете поизвращаться вот с таким извращенским кодом:
Код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream>
using namespace std;
template<int N>
struct Type{
    //typedef int type;
};
template<>
struct Type<1>{
    typedef double type;
};
template<>
struct Type<2>{
    typedef float type;
};
enum qwerty
{
    doubleType = 1,
    floatType = 2
};
int main(){
    int type = 1;
    void *myvar;
//Тут создание
    switch(type){
        case 1: myvar = new Type<doubleType>::type;
        break;
        case 2: myvar = new Type<floatType>::type;
        break;
    }
//Тут разыменование
    switch(type){
        case 1:{
            Type<doubleType>::type var = *((Type<doubleType>::type *)myvar);
        }
        break;
        case 2:{
            Type<floatType>::type var = *((Type<floatType>::type *)myvar);
        }
        break;
    }
        delete myvar;
	return 0;
}
Можете еще этот код глянуть, может пригодится:
http://programmersforum.ru/showpost....7&postcount=60

Последний раз редактировалось Kostia; 29.11.2011 в 17:09.
Kostia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможно, новый тип 3D игр. _PROGRAMM_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 28.11.2011 15:22
шаблоны и typedef в С++ EniOk Помощь студентам 19 02.03.2011 16:55
Массив как новый тип BioS Общие вопросы C/C++ 6 13.06.2010 07:44
Новый тип с зарезервированными словами Alex Cones Общие вопросы Delphi 5 03.06.2009 22:22
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55