Probleme mit einer Klasse...
-
lol dann bin ich wenigstens nicht der einzige, der unbedingt engl. kommentieren muss

-
Dauermuede schrieb:
bringts da vielleicht was, semikolons nach jeder zeile einzufügen?
nein.
wie gesagt die von mir oben gepostete funktion sollte funktionieren. zeig am besten nochmal deinen jetzigen code.
Dauermuede schrieb:
ich brauch ja nur einen namen...
bekommst ja auch nur einen - die forschleife bitte nicht falsch verstehen
die liest nur solange bis sie an der gewuenschten zeile angekommen ist (die ja per zufall festgelegt wurde) also 'Name' wird jedesmal ueberschrieben - und wenn halt keine zeilen mehr da sind (datei zuende) wird 'Name' halt mit 'nichts' ueberschrieben.
-
naja... 2 fehlermeldungen hab ich wieder wegbekommen...
aber die "namespace-fahlermeldung" hab ich noch sowie die aussage, dass Name nicht deklariert sei

-
hier der code:
#include <time.h> #include <stdlib.h> #include <iostream> #include <fstream> #include <string> using namespace std; using namespace ios; typedef unsigned short int USI; class Musician { public: Musician(); // constructor string Name; // musicians last name string GivenName; // musicians given name USI b_day; // day of birth (value between 1 and 30 USI b_month; // month of birth (value between 1 and 12) USI b_year; // year of birth (value between 1950 and 1990 string VoiceHeight; // describes the voice height string VoiceType; // describes of whick type the voice is /* string MusicStyle; // prefered music style string Primary; // copy of the most skilled category string Secondary; // copy of the second most skilled category USI SkillPrimary; // copy of the highest skill USI SkillSecondary; // copy of the second highest skill USI SkillSinging; // skill in singing USI SkillGuitar; // skill in guitar USI SkillBass; // skill in bass USI SkillDrums; // skill in drums USI SkillKeyboard; // skill in keyboard USI SkillSongwriting; // skill in songwriting USI Talent; // defines maximum of skill to gain in a category USI Learning; // defines speed of learning also influenced by talent USI Motivation; // describes actual motivation and influences also learning speed USI ExpStudio; // studio experience (how many records?) USI ExpStage; // stage experience (how many gigs?) USI Exp; // average of studio and stage experience */ }; Musician::Musician() { b_year = 1960+(rand()%30); // randomly created birth year b_month = 1+(rand()%12); // randomly created birth month if (b_month == 2) b_day = 1+(rand()%27); // randomly created birth day else b_day = 1+(rand()%29); void ran_Name(); // random selection of last name } void ran_Name() { int zeile1 = 1+(rand()%73); ifstream file; file.open("names.txt"); for(int w = 1; w <= zeile1; ++w) getline(file,Name); file.close(); }@ das_brot: ja scheint fast... weiß auch nich warum ich den zwang dazu hab

mfg thomas
-
naja ist ios nicht in std? falls ja kann man doch afaik
using namespace std::iosschreiben oder?
und wo und wie hast du denn 'Name' definiert?
naja und ansonsten halt nochmal den source
.
-
Name ist ein elem von Musician
string Musician::Name;
-
ran_Name() muss natuerlich auch noch member von deiner klasse sein.
-
hmm hab "using namespace ios;" jetzt auskommentiert... scheint nichts auszumachen. der fehler is zumindest weg, ohne dass neue gekommen sind.
aber vielleicht kommt das ja auch wieder plötzlich
ähm also "Name" is doch in der klasse definiert!? es geht ja um genau DIESES "Name".
mfg thomas
-
Cpt.Tanga schrieb:
ran_Name() muss natuerlich auch noch member von deiner klasse sein.
ist es doch durch den konstruktor. ich mein als ichs jetzt dazugeschrieben hab, kam zumindest keine zusätzliche fehlermeldung aber ohne dass es direkt in der klasse (nicht über den konstruktor) eingetragen is, gibts auch keinen fehler...
übrigens wegen source: am source-code hat sich nichts geändert... der gibt nur die sachen zum test aus.
das_brot schrieb:
Name ist ein elem von Musician
habs dazugeschrieben, wie du es angegeben hast, aber der fehler besteht weiterhin

mfg thomas
-
im konstruktor solltest du die funktion dann auch aufrufen (du deklarierst sie da nur).
-
jetzt gehts wieder...
und so hat ichs doch auch am anfang... irgendwie is der compiler von dev-cpp nich so ganz zuverlässig... mal zeigt er nen fehler mal nich... selbst wenn man an der besagten stelle nichts ändert!naja, aber das andere problem bleibt bestehen: es wird nur der nachname ausgelesen... die anderen variablen bleiben leer...
mfg thomas
-
ne, ich wollte nur erklären, was Name ist, weil Cpt.Tanga danach gefragt hat.
-
achso...

habt ihr beiden vielleicht noch ne idee, wie ich das andere problem in den griff bekomme?
code-ausschnitt:
int zeile1 = 1+(rand()%73); // random selcetion last name ifstream file; file.open("names.txt"); for(int w = 1; w <= zeile1; ++w) getline(file, Name); file.close(); int zeile2 = 1+(rand()%57); // random selection given name ifstream file2; file2.open("gnames.txt"); for(int x = 1; x <= zeile2; ++x) getline(file2,GivenName); file2.close();muss man hier eigentlich "file" durchnummerieren oder is das dann egal, weil die andere datei geschlossen is? die 2 weglassen behebt das problem jedenfalls nicht

mfg thomas
-
nein du musst 'file' nicht durchnummerrieren - reicht doch eins aus.
istream file("meineDatei.txt"); //tu was mit der datei file.close(); file.open("meineNaechsteDatei.txt"); //noch was damit machen
-
haettest auch nicht jedesmal ne neue funktion gebraucht. sowas in der art waer in deinem fall bestimmt auch ganz gut gegangen:
void Musician::GetSomeName(const string &fileName,string &name,int ml) { int z=1+(rand()%ml); ifstream file(fileName.c_str()); for(int i(1);i<=z;++i) getline(file,name); file.close(); };
-
1. file hab ich jetzt also einheitlich
2. zeile nun auch (gilt dann wohl auch hier?). wird ja jedes mal neu "generiert".
3. mit deiner vorgeschlagenen funktion kann ich weniger anfangen... in der art hab ich sie auch damals nich aufgebaut... außerdem müsste man hier doch immer wieder einen neuen wert für die ml angeben, da ja nicht jede datei die gleiche anzahl an zeilen hat?!mfg thomas
-
Dauermuede schrieb:
müsste man hier doch immer wieder einen neuen wert für die ml angeben, da ja nicht jede datei die gleiche anzahl an zeilen hat?
ja, aber ich denke das ist besser als jedesmal dafuer ne neue funktion zu schreiben.
die aufrufe wueden ja dann so aussehen:
... GetSomeName("names.txt",name,73); GetSomeName("gnames.txt",givenNames,58); ...aber es laeuft ja jetzt zum glueck auch so (?).
-
ja es läuft fast! die nachnamen werden wieder zufällig ausgesucht...
aber wie gesagt: die anderen strings werden nicht "befüllt"aber ich werds mal mit deiner funktion versuchen. danke für die erklärung, jetzt hab ichs kapiert

mfg thomas
-
1. falls du deine funktion nicht getestet hast: sie funktioniert einwandfrei
2. aber das gleiche problem gibt es auch hier: es wird nur der nachname eingelesen (vielleicht wird aber auch nur der gespeichert?)mfg thomas
-
wenn du alle deine variablen mit der einen funktion initialisierst wird blos der nachname initialisiert? - oder wie meinst du das? naja schau zur not mal mit nem debugger durch ob alle anderen namen leer sind oder lass dir die mal ausgeben. der fehler muss auf alle faelle wo anders liegen als in der funktion -die is eigentlich ok.