Stos jako zmienna klasy. Przypisanie wartosci do stosu.

0

Witam, szukalem w goolach z 5 godzin i nic nie znalazlem. Jak przypisac wartosci do stosu ktora jest zmienna klasy. Potrafie przypisac poszczegolne wartosci gdy zmienna klasy jest tablicą ale ze stosem mi nie wychodzi. Ponizej przykladowy kod:

#include <iostream>
#include <stack>

using namespace std;

class dane{
public:

        char imie[20];
        char nazwisko[20]
        int wiek ;

};
stack <dane> stos;

// ponizej glowna funkcja z ktorej chcialbym dodawac na stos nowy element do stosu na zasadzie stos.push(?) a w //elemencie przypisywalbym sobie skladniowe imie, nazwisko i wiek.

int main(){

//??????????????

return 0;   
}
0

o_O

dane d;
//przpisanie wartości
stos.push(d);

Już widzę jak "szukałeś 5 godzin" skoro dokumentacja daje od razu przykład:
http://www.cplusplus.com/reference/stack/stack/push/

1

Jak masz w miarę nowy kompilator

    stos.push(dane{"Ala","Kowalska",19});

poza tym nie nazywaj klasy dane.

0

A jak zrobic by uzytkownik sam wypelnial stos skladniowymi np jesli chce tylko przypisac sam wiek bez imienia i nazwiska? Tak jak np w tablicy to by bylo


dane tablica[5];
cin>>tablica[0].wiek;
0
dane tmp;
while(scanf("%d %s", &tmp.int, tmp.string)) {
  stos.push(new dane(tmp));
}
#include <iostream>
#include <stack>
#include <string>
using namespace std;

class Data {
public:
    Data(): intVariable(0), stringVariable("") { ; }
    Data(int iVal, const string& sVal):
        intVariable(iVal),
        stringVariable(sVal)
    {
        ;
    }

    Data(const Data& d):
        intVariable(d.intVariable),
        stringVariable(d.stringVariable)
    {
        ;
    }

    friend ostream& operator<<(ostream& out, const Data& d) {
        return out << "-> " << d.intVariable << "\t" << d.stringVariable;
    }

    friend istream& operator>>(istream& in, Data& d) {
        return in >> d.intVariable >> d.stringVariable;
    }

private:
    int intVariable;
    string stringVariable;
};

int main() {

    stack<Data> myStack;
    Data temp;
    while(cin >> temp) {
        myStack.push(temp);
    }

    while (!myStack.empty()) {
        cout << myStack.top() << endl;
        myStack.pop();
    }

    return 0;
}

http://ideone.com/zRD4Gp

Mozna tak, np.

0

No wlasnie nie odpala ten kod. Jak to przerobic na c++?

Bardziej mi chodzilo o to by program wyswietlal - "podaj wiek: " a uzytkownik wpisuje do plola przeznaczonego na wiek liczbe. Analogicznie z imieniem.

1
dane tmp;
printf("Podaj wiek i imie: ");
if(scanf("%d %s",&tmp.wiek,tmp.imie)==2) stos.push(tmp);

Przerobiono z pierwotnego kodu od @n0name_l.
@januszexxxx nie czekaj aż za ciebie zrobią całość, jak coś nie działa to znaczy gdzieś się wkradł drobny błąd, który da się naprawić samodzielnie używając wskazówek kompilatora.

0

Jest tu jeszcze ktos?

Eh kombinuje z tym przypisaniem nazwiska do stosu i cholera nie wychodzi. Ponizej kilka potworkow hehe. Niech ktos wreszcie napisze jak to powinno byc.

#include <iostream>
#include <stack>
#include <cstdio>
using namespace std;

class dane{
public:

        char imie[20];
        char nazwisko[20];
        int wiek ;

};
stack <dane> stos;
////////////////////////////////////////////////////////////////////
int main(){

//cin>>stos.push(dane.nazwisko);                            <-- lipa
//cin>>stos.push(dane{}.nazwisko);                         <-- lipa
//cin>>stos.push(dane({}).nazwisko);                      <-- lipa
//cin>>stos.push(dane().nazwisko);                         <-- lipa
//cin>>stos.push(dane{.nazwisko});                        <-- lipa
//cin>>stos.push(dane().nazwisko);                         <-- lipa

cout<<stos.top().nazwisko;

return 0;
}
0

Ech, szkoda słów. Tworzysz stos obiektów "dane" i TYLKO takie rzeczy mozesz wkładać/zdejmować z tego stosu. Koniec, kropka! Nie możesz tam wrzucić samego nazwiska bo nazwisko to char[] a nie dane.
Nie da się tego w ogóle zrobić tak jak pokazałeś. Musisz wczytać za pomocą cin>> dane do jakiejś zmiennej tymczasowej a potem wrzucić ją na stos.

0

O to co wykombinowalem. Niestety jest jakis problem z wyswietlaniem napisow. Program sie kompiluje ale z błędem:
"53 11 C:\Documents and Settings..\Untitled2.cpp [Warning] extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]"

Co to moze byc?


#include <iostream>
#include <stack>

using namespace std;

class dane{
public:

        char imie[20];
        char nazwisko[20];
        int wiek;

};
stack <dane> stos;
////////////////////////////////////////////////////////////////////
int main(){

 char a[20];
 char b[20];
 int c;
 char wyb;

cout<<"czy dodac imie?  T - tak: ";
cin>>wyb;
if (wyb=='t')
{
    cout<<"Wpisz imie: ";
    cin>>a;

}

cout<<"czy dodac nazwisko?  T - tak: ";
cin>>wyb;
if (wyb=='t')
{
    cout<<"Wpisz nazwisko: ";
    cin>>b;
}

cout<<"czy dodac wiek?  T - tak: ";
cin>>wyb;
if (wyb=='t')
{
    cout<<"Wpisz wiek: ";
    cin>>c;
}

stos.push(dane{{a[20]},{b[20]},c});

cout<<stos.top().imie<<endl;
cout<<stos.top().nazwisko<<endl;
cout<<stos.top().wiek<<endl;

return 0;   
}

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