Zu Vectoren mehr Infos speichern

RuFFnEcK

Erfahrenes Mitglied

Als Hintergrundwissen:
Ein Programm für ne Art Umfrage...
Es gibt 100 Fragen und -> 100 Antworten
Ich würde gern das ganze als Vector implementieren^^
Also vector <int> umfr;
Dann bekommt der vector 100 Elemente...
Dann will ich in der Klasse umfrage zu jedem Eintrag im Vector:
-string Frage
-string Kategorie
-string Unterkategorie
-string Antwort
-bool beantwortet
speichern!
Ich schreib dann für jeden Eintrag eine set und get methode!
Nur find ich im mom den Ansatz nicht :rolleyes: :rolleyes:

Wenn ich den vector als Datenmeber der Klasse definiere, würde das ja net ...
Hat viell. jemand ne Idee wie cih das am besten implementiere?
Oder viell. nen Besseren Vorschlag als nen vector!
War kurz davor einfach ne andere Klasse zu schreiben und da alles in arrays uz speichern und die als private member der Klasse umfrage zu definieren...Aber ich finde mit nem vector zu arbeiten schöner ;)

Freu mich über jede Antowort^^

Grüsse
 
Zuletzt bearbeitet:
Hallo,
du kannst in einem Vector nicht nur ints speichern sondern jeden beliebeigen
Datentyp.
Ein Vorschlag(wenn ich dich richtig verstanden hab könnte vielleicht so aussehen:
(Nicht alle Methoden sind ausimplementiert nur die die Zugriff, Schreiben,
und Speicherplatzfrigabe (wichtig) zeigen sollen)

Code:
#include <iostream>
#include <vector>

using namespace std;

class Eintrag{

        public:
                Eintrag(int id, const string& q, const string& c, const string& s, const string& a = "", bool ans = false);
                int getId();
                int setId(int id);
                ...

        private:
                int id;
                string question;
                string category;
                string subcategory;
                string answer;
                bool answered;
};


class Umfrage(){

        private:
                string name;
                //vector mit Eintrag* Elementen
                vector<Eintrag*> katalog;
        public:
                //neue Umfrage mit name als Name erschaffen
                Umfrage(const string& name);

                ~Umfrage(){
                        //Speicherplatz wieder freigeben nicht vergessen
                        for(int i = 0; i < katalog.size(); i++)
                                delete katalog[i];
                }

                //neuen Eintrag hinzufuegen
                void addEintrag(){
                        katalog.push_back(new Eintrag(...));
                }

                const string& getName();

                void printEintragAtIndex(int i){
                        if(i >= 0 && i < katalog.size())
                                cout << "Id: " << katalog[i]->getId() << endl;
                }
};

Gruß

RedWing
 
Du bist mein persönlicher Held
Hatte das ganz vergessen mit den beliebigen DatenTypen^^
Fuck, ich hatte mal in einem Programm mit nem Vector beliebigen Typs gearbeitet, aber wieder vergessen ;)
Bei Fragen, die bestimmt noch kommen, editier ich den beitrag hier fürs erste^^

DANKE ;-)
 
So ich hab dann mal ne frage zum Konstruktor...
Also ich hab den erst mal überladen.
Das sind die beiden die ich bisher implementiert hab, jedoch dazu folgende Frage:

Ich hab einmal den:
Code:
U_Object::U_Object(void)
{
	answered = false;
}
und einmal den:
Code:
U_Object::U_Object(const string& quest, const string& cat, const string& sub, bool answ = false)
: question(quest), category(cat), sub_category(sub),  answered(answ)
{}


Ich will answered immer mit false initialisieren (answere ist ja egal, weil nur wenn answered true ist kann ich auf answere zugreifen ;) )
Aber muss ich bei jedem Konstruktor-Aaufruf alle parameter übergeben? (den roten)
Wenn ich den z.B. wie folgt aufrufe:

Code:
bool Umfrage::addObject(string& quest, string& cat, string& sub)
{
	katalog.pushback(new U_Object(quest, cat, sub));
        return true;
}

Dann bekomm ich die Fehlermeldung dass keiner der Konstruktoren dafür gemacht ist...
Aber ich mach doch schon in der deklaration diese Zuweisung an answ
Code:
bool answ = false

Oder soll ich den Parameter weglassen und sollte ich eine Umfrage laden und dafür dann ne copykonstruktor schreiben der das dann verarbeitet...

Danke und Grüsse ;-)
 
Sooo die Frage die hier drüber steht, ist eigentlich nicht so wichtig, war eher Allgemein ^ ^

Soweit hab ich das ganze implementiert (natürlich noch nicht fertig weil ich immer wieder an diesem compiler hängen bleib:(
Ich hab hier viell. Probleme, der gibt mir Fehlermeldung aus womit ich nix anfangen kann!
Naja dann poste ich einfach mal alles Quell-Code:

Umfrage.h

Code:
#pragma once

#ifndef UMFRAGE_H
#define UMFRAGE_H

#include "./U_Object.h"
#include <vector>
#include <string>

using namespace std;

class Umfrage
{
private:
	vector<U_Object*> katalog;
	string name;


public:
	
	Umfrage(const string& na);
	~Umfrage(void);

	bool addObject(const string& quest, const string& cat, const string& sub);
}

#endif

Umfrage.cpp

Code:
#include "StdAfx.h"
#include ".\umfrage.h"
#using <mscorlib.dll>


Umfrage::Umfrage(const string& initName)
: name(initName),
{}


Umfrage::~Umfrage(void)
{
	int i = katalog.size()-1;

	for(i; i >= 0 ; i--)
	{
		delete katalog[i];
	}
}




bool Umfrage::addObject(const string& quest, const string& cat, const string& sub)
{
	katalog.pushback(new U_Object(quest, cat, sub));
	return true;
}

Der blöde Compiler meckert schon beim Konstruktor, mit folgender Meldung:

Umfrage.cpp(7) : error C2533: 'Umfrage::__ctor': Ergebnistyp für Konstruktoren nicht zulässig
Umfrage.cpp(7) : fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
Also mit dieser Fehlermeldung kann ich nicht besonders viel Anfangen...
(Hab natürlich probiert alles auszublenden bis auf die Rohe Funktion, aber auch da der gleiche Fehler!

Und das beste noch wenn ich den Konstruktor ausblende, kommt folgende fehlermeldung für den Destruktor:
Umfrage.cpp(12) : error C2577: 'Umfrage::~Umfrage': Destruktor kann keinen Wert zurückgeben
Umfrage.cpp(12) : fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
U_Object.cpp

Da frag ich mich WELCHER RÜCKGABEWERT

Also ich weiß nicht was hier los ist und muss sagen dass das echt schlimm ist mit dem Visual zu programmieren, ständig komische Fehler...
Naja, viell. liegt der Fehler auch an mir ^ ^
freu mich über Antworten ;)

Grüsse
RuFF
 
Den hab ich irgendann aus verzweiflung dahin gemacht^^
Aber daran liegts nicht und wie gesagt selbst wenn ich jeglichen Inhalt aus den Konst. und Dest. ausdokumentier, kommen die gleichen Fehler!
Aber ich weiß nicht, das ist ja ein M$ - Produkt, vielleicht sollte ich den rechner mal neustarten, dann läufts ja viell. ;)
Grüsse
 
Mein Rechner läuft getz 14 tage am Stück, es könnte ja wirklich sein dass es an M$ liegt^^
Oder an Einstellungen? Mir würde sonst nix einfallen...

U_Object.h

Code:
#pragma once

#ifndef U_OBJECT
#define U_OBJECT

#include <string>

using namespace std;

class U_Object
{

private:
	string question;
	string category;
	string sub_category;
	short unsigned int answer;
	bool answered;
	void answereDone();	//only once sets answered on true

public:
	U_Object(void);
	U_Object(const string& quest, const string& cat, const string& sub, const short unsigned int ans = 0, bool answ = false);
	~U_Object(void);

	//SETS
	void set_quest(string quest);
	void set_cat(string cat);	
	void set_sub(string sub);
	void set_ans(short unsigned int ans);

	//GETS
	const string get_quest();
	const string get_cat();
	const string get_sub();
	const short unsigned int get_ans();


};
#endif

U_Object.cpp
Code:
#include "StdAfx.h"
#include ".\u_object.h"
#using <mscorlib.dll>

U_Object::U_Object(void)
{
	answered = false;
}
U_Object::U_Object(const string& quest, const string& cat, const string& sub, const unsigned short int ans = 0, bool answ = false)
: question(quest), category(cat), sub_category(sub), answere(ans),	answered(answ)
{}


U_Object::~U_Object(void)
{
}

//------------------------------------------------------------------
//SETS
//------------------------------------------------------------------
void U_Object::set_quest(string quest)
{
	question = quest;
}
void U_Object::set_cat(string cat)
{
	category = cat;
}
void U_Object::set_sub(string sub)
{
	sub_category = sub;
}
void U_Object::set_ans(unsigned short int ans)
{
	answer = ans;
	answereDone();
}
void U_Object::answereDone()
{
	answered = true;
}

//------------------------------------------------------------------
//GETS
//------------------------------------------------------------------
const string U_Object::get_quest()
{
	return question;
}

const string U_Object::get_cat()
{
	return category;
}

const string U_Object::get_sub()
{
	return sub_category;
}

const unsigned short int U_Object::get_ans()
{
	if(answered)
		return answer;
}

Ok das wars auch schon!
Das ist alles an Source Code den ich bisher produziert hab, ich kann mir nie weiter Gedanken machen wenn schon etwas nicht läuft...darum bin ich noch nicht weiter.

Danke und Grüsse :)
 
Hallöchen,
ich weiß nicht woran es liegt :suspekt: :suspekt: :suspekt:
Jedenfalls bin ich jetzt hergegangen und hab alles in die header datei geschrieben und er kompiliert es wunder´bar!
Sobald ich die definitionen in die Quell Datei schreibe meckert er mir die komischen Fehlermeldung!
Meine Frage jemand erfahrung mit dem scheiss
Ansonsten werd ich schaun wieder mit dem Borland zu arbeiten, ist ja schlimm mit dem M$ ...
 
Zurück