zasieg zmiennej deklarowanej w ifie

0

Mamy taki oto kod:

main(){
int a = 5;
if (a==5) int b;
}
 

Czy jest sposób aby b było widziane poza ifem?

0

Jeśli b ma być w takiej postaci jak teraz to C++ nie przewiduje sposobu, aby z zewnętrznego zakresu odwołać się do zmiennej zadeklarowanej w wewnętrznym zakresie tego zewnętrznego.

0

Dokladniej chodzi mi o cos takiego:

main(){
cin >> typD; // wybieram odpowiedni typ dla szablonu
  if (typD==1) Budynek<Winda> budynek;
  if (typD==2) Budynek<WindaB> budynek;
  if (typD==3) Budynek<WindaX> budynek;
  budynek.f(); // tu korzystam z f.wirtualnej na rzecz wybranego typu, tyle ze nie widzi mi obiektu budynek a nie wiem jak to inaczej zrobic:)
}
 

Dzieki za odpowiedzi

0

Coś przekombinowałeś - daj więcej kodu dot. Budyneku, i Wind.
//bez wskaźników się raczej nie obejdzie.

0

Bardzo możliwe ze przekombinowałem - 1 raz używam szablonów, na dodatek to użycie jest mało przemyślane i mocno na siłę bo muszę zaliczyć projekt.

template <typename typDodatkowej>
class Budynek{
	friend class Winda;
	Klatka *klatka;
	typDodatkowej prototyp;
	typDodatkowej **windodatkowa;
	char adres[35];
	int ile_wind;
public:
	Budynek();
	~Budynek();
	friend ostream& operator>>(ostream& in,Budynek &obiekt);
	friend void dodaj_czl(Budynek *budynek,int nr,int waga,int cel);
	template <typename typ>
	friend void stworzPrototyp(typ *budynek,int dop,int pie);
	friend Winda** kopiuj_winde(Budynek *budynek,int ile);
	friend void winda_info(Budynek budynek,int nr,int typ);
	friend void wykonajPrzejazd(Budynek *budynek,int typ,int nr);
	void stworzKlatke(int ilosc);
	void prezentujWinPas(int i);
	void prezentujWinTow(int i);
	void securityInfo(int i);
};

template <typename typ>
void stworzPrototyp(typ *budynek,int dop,int pie)
{
	budynek->prototyp.dopuszczalne=dop;
	budynek->prototyp.pietro=pie;
}

int _tmain(int argc, _TCHAR* argv[]){
  cin >> typD; //tu chcialbym wybrac typ szablonu
  Budynek<Winda> budynek; //  tu tworzyć wybrany przeze mnie typ(Wind jest kilka rodzajów) - w obecnym stanie jestem skazany
                              // na taki jaki sobie ręcznie wpiszę:)
  stworzPrototyp(&budynek,dop,pie); // a tu zawsze wywoływać funkcję w takiej postaci
}

 

Oto szablon Budynku. Zakładam na poczatku programu okreslac jaki bedzie typ szablonu, tzn. jakiego typu bedzie winda dodatkowa. Dlatego próbowałem to zrobić za pomocą if'a. Istnieje może uniwersalny wskaźnik który mógłby pokazywać na wszystkie rodzaje danej klasy szablonowej?

0

w zasadzie mógłbyś zrobić klasę abstrakcyjną i szablon który by po niej dziedziczył. poczytaj o polimorfizmie.

0

Nie wiem czy dokładnie o to chodzi, ale void* może pokazywać na każdy inny typ.

0

chodzi mi o coś takiego:

#include <iostream>

using namespace std;

class Budynek
{
public:
  virtual void pokazjakiesinfo()=0;
};

template <class tinfo>
class _Budynek: public Budynek
{
public:
  tinfo info;
  _Budynek(tinfo info): info(info) {}
  void pokazjakiesinfo()
   {
    cout << info << endl;
   }
};

int main()
{
  int typ;
  Budynek* budynek;
  cout << "podaj typ 1,2,3" << endl;
  cin >> typ;

  if (typ==1)
   {
    cout << "Podaj liczbe:" << endl;
    int a;
    cin >> a;
    budynek = new _Budynek<int>(a);
   }
  else if (typ==2)
   {
    cout << "Podaj tekst:" << endl;
    string a;
    cin >> a;
    budynek = new _Budynek<string>(a);
   }
  else
   {
    cout << "Podaj znak:" << endl;
    char a;
    cin >> a;
    budynek = new _Budynek<char>(a);
   }
  cout << "info: ";
  budynek->pokazjakiesinfo();
  delete budynek;
  cin.get();
  return 0;
}

0

O takie coś mi chodziło. Dzięki wielkie!

1 użytkowników online, w tym zalogowanych: 0, gości: 1