Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » beliebige Anzahl von Objekten zur Laufzeit - wie?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] > 3 <
020
22.01.2006, 18:13 Uhr
Noob2k5




Zitat von Spacelord:
Das was du da deklariert hast ist ein Zeiger auf nen std::vector der Member Instanzen aufnimmt,kein vector der Zeiger auf Member Instanzen aufnimmt!

Das was du möchtest sieht so aus

C++:
std::vetor<Member*> my_members;



Das ist ein himmelweiter Unterschied.

Und angenommen der Typ deiner Variablen wäre korrekt,dann würdest du mit deinem pushback Probleme bekommen.
pMitglied ist ein Zeiger auf ne Member Instanz,also das was du eigentlich in den vector stopfen möchtest.
In deinem pushback dereferenzierst du aber den Zeiger und versuchst somit ein Memberobjekt in den vector einzufügen.
Also bei den Problemen die du noch mit Zeigern hast kann ich dir eigentlich nur davon abraten nen vector mit Zeigern zu führen weil du dich um die Speicherfreigabe komplett selber kümmern musst.
Da sehe ich momentan ne Menge Speicherlöcher auf dich zukommen

MfG Spacelord


Wenn ich mir den Pointer in den vector schieben:


C++:
Member *pMitglied = new Member( id, name, tg, mn, jr);
    
    member.push_back(pMitglied);
    
    delete pMitglied;


Müsste ich doch eigentlich so auf das Objekt so zugreifen können:

C++:
member.at(1)->getName();



Sobald ich aber an diese Stelle komme, schmiert mir das Programm mit einem out of range fehler ab:
Zitat:

C++ exception: std::out_of_range at memory location 0x0012fc08..


Ist jetzt vermutlich genau die Problematik die Spacelord angesprochen hat.

Gibts irgendwelche Lektüre die man einem noob ans herz legen kann, die einem die Pointer Thematik auch etwas tiefgründiger erklärt?

Dieser Post wurde am 22.01.2006 um 18:14 Uhr von Noob2k5 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
22.01.2006, 18:38 Uhr
Oliver
S2-Pixelgeneral


Man fängt bei 0 zu zählen an. 0 ist also das 1. Element, 1 das 2. usw. Du greifst aber mit 1 auf das 2. zu, das es noch gar nicht gibt.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )

Dieser Post wurde am 22.01.2006 um 18:39 Uhr von Oliver editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
22.01.2006, 19:35 Uhr
Noob2k5



Ach stimmt, verdammt - Danke.

Funktioniert aber leider immernoch nicht. Jetzt wirft er mir "std::bad_alloc at memory location 0x0012f600" als Fehler aus.


Hier mal mein Source:

C++:
#include "stdafx.h"
#include <iostream>
#include <sstream>
#include <vector>
#include "Date.h"
#include "Member.h"

std::string name, gebDatum;
std::stringstream stream;
int jr=0, mn=0, tg=0, id = 0, menupunkt;

int Menu();

void CreateMember();

std::vector<Member*> member;


int main()
{
    
    id++;
    

    menupunkt = Menu();

    switch(menupunkt)
    {
        case 1: CreateMember();
            member.at(0)->getName();
            std::cout<<"Objekt Member zugegriffen\n";
            break;
    }

    

    
    return 0;
}


int Menu()
{
    std::cout<<".....::MENU::.....\n\n";
    std::cout<<"1. Mitarbeiter anlegen\n";
    std::cout<<"2. Mitarbeiter bearbeiten\n";
    std::cout<<"9. Programm beenden\n\n";

    std::cout<<"Geben Sie Ihre Auswahl ein: ";

    int auswahl;
    std::cin>>auswahl;
    std::cin.ignore(1,'\n');

    return auswahl;
}

void CreateMember()
{
    std::cout<<"Geben Sie bitten den Namen des anzulegenden Mitglieds an"<<std::endl;
    std::getline(std::cin, name);

    std::cout<<"Geben Sie das Geburtsdatum der Person im Format TT.MM.JJJJ an"<<std::endl;

    char pkt;

    std::cin>>tg>>pkt>>mn>>pkt>>jr;

    if(checkDatum(tg, mn, jr))
    {
        //Wenn Datum fehlerhaft, mit Null besetzten
        tg = 0; mn = 0; jr = 0;
    }

    Member *pMitglied = new Member( id, name, tg, mn, jr);
    std::cout<<"Objekt Member erzeugt\n";
    member.push_back(pMitglied);
    std::cout<<"Objekt Member pushed_back\n";
    
    delete pMitglied;
    std::cout<<"Objekt Member deleted\n";

}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: