Mam do napisania program:
Napotkałem problem: chcę wyświetlić pierwszy element tablicy wskaźników w instrukcji switch case 87 - program przestaje działać. Tablica wskaźników zawiera u mnie stringi w postaci z = a+bj, które wprowadzam za pomocą funkcji ostringstream w case 78.
Jedyny błąd jaki mi wyświetla:
||=== Build: Debug in Zad3 (compiler: GNU GCC Compiler) ===|
H:\JiPP\Lab2\Zad3\main.cpp|11|warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11|
||=== Build finished: 0 error(s), 1 warning(s) (0 minute(s), 1 second(s)) ===|
||=== Run: Debug in Zad3 (compiler: GNU GCC Compiler) ===|
Kod:
#include <iostream>
#include <cstdlib> // W tym programie służy do obsługi funkcji exit
#include <sstream> // Strumienie napisowe
using namespace std;
class LiczbaZespolona
{
double Im, Re;
string *tablica; // Utworzenie tablicy wskaźników
int n = 0;
public:
// Konstruktor wywoływany podczas tworzenia obiektu klasy
LiczbaZespolona(double = 0, double = 0, bool = false); // Nadanie wartości domyślnych dla składowych klasy
/* Mając taki konstruktor mamy tak na prawdę zestaw konstruktorów:
LiczbaZespolona(double,double,bool)
LiczbaZespolona(double,double)
LiczbaZespolona(double)
LiczbaZespolona()
*/
~LiczbaZespolona(); // Destruktor
void utworzLiczbeZespolona()
{
cout << "Im = " << Im << endl;
cout << "Re = " << Re << endl;
cout << "n = " << n << endl;
// Rezerwuje pamięć od pierwszego elementu tablicy
tablica = new string[50];
// Operacje na napisach - łączenie różnych typów obiektów na napisy i odwrotnie
ostringstream ss;
ss << "z = " << Re << "+" << Im << "j";
if (n < 50)
{
tablica[n] = ss.str(); // Wpisanie do tablicy liczby zespolonej
n++;
}
else
cout << "Tablica zostala zapelniona!" << endl;
}
void wyswietlLiczbeZespolona()
{
cout << "tablica[0] = " << *tablica << endl;
/*
cout << "tablica[n] = " << tablica[i] << endl;
if (tablica[i] != "") // Sprawdzenie czy liczba zespolona o podanym indeksie jest w tablicy
cout << tablica[i] << endl;
else
cout << "Liczba zespolona o podanym indeksie nie istnieje!" << endl;*/
}
};
LiczbaZespolona::LiczbaZespolona(double i, double r, bool run)
{
Im = i;
Re = r;
// Nadanie Im i Re tych samych wartości
if (i != 0 && r == 0)
Re = Im;
if (run == true)
utworzLiczbeZespolona();
}
LiczbaZespolona::~LiczbaZespolona()
{
delete [] tablica; // Usunięcie tablicy
}
int main()
{
char menu;
double cz_u = 0, cz_rz = 0;
int indeks = 0;
while (menu != 'K')
{
cout << "--------------------------------------------------------------" << endl;
cout << "Co mam zrobic:" << endl;
cout << "N. Utworz liczbe zespolona (2 argumenty)" << endl;
cout << "R. Utworz li czbe zespolona (1 argument)" << endl;
cout << "W. Wyswietl wartosc liczby zespolonej o podanym indeksie" << endl;
cout << "+. Suma dwoch liczb zespolonych" << endl;
cout << "-. Roznica dwoch liczb zespolonych" << endl;
cout << "*. Iloczyn dwoch liczb zespolonych" << endl;
cout << "/. Iloraz dwoch liczb zespolonych" << endl;
cout << "K. Koniec programu" << endl;
cout << "Wybierz: ";
cin >> menu;
switch (menu)
{
case 78: //N
{
cout << "Podaj czesc rzeczywista Re(z): ";
cin >> cz_rz;
cout << "Podaj czesc urojona Im(z): ";
cin >> cz_u;
LiczbaZespolona lz(cz_u,cz_rz,true);
}
break;
case 82: //R
{
cout << "Podaj czesc urojona Im(z): ";
cin >> cz_u;
LiczbaZespolona lz(cz_u,true);
}
break;
case 87: //W
{
cout << "Podaj indeks liczby zespolonej, ktora chcesz wyswietlic: ";
cin >> indeks;
LiczbaZespolona lz;
lz.wyswietlLiczbeZespolona();
}
break;
case 43: //+
{
}
break;
case 45: //-
{
}
break;
case 42: //*
{
}
break;
case 47: //slash
{
}
break;
case 75: //K
exit(0); // Definitywne zakończenie programu
break;
default:
cout << "Nie ma takiej opcji w menu!" << endl;
break;
}
};
return 0;
}