Probleme mit einer Klasse...
-
deine ganzen funktionen sollten im grundgeruest so in etwa aussehen:
void ran_any() { int zeile=1+(rand()%anzahlZeilenInDatei); ifstream file; file.open("dateiname.txt"); for(int i=1;i<=zeile;++i) getline(file,stringVar); file.close(); };dann muesste es auch mit dem zufall wieder stimmen. in der variable 'zeile' steht also die nummer der zeile welche zufaellig ausgewaehlt wurde. dann wird in der for schleife solange aus der datei ausgelesen bis man an dieser zeile angekommen ist, und dieser inhalt sollte dann in 'stringVar' stehen.
-
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(); }hier... habs ja so

am anfang hats ja auch funktioniert... nur jetzt gehts nimmer
hab jetzt erst gedacht, es lag daran, dass ich die funktion nicht mit void initialisiert habe, aber das wars nun auch nich...
-
es ist zum verzweifeln...
hab jetzt die for-schleife in eine "umständliche" while- und if-schleife umgeschrieben... aber immernoch das gleiche!
wie wenn die erste zeile in der variable festgefressen wäre...
die variable bzw. den string explizit leer zu definieren bringt auch nix -> es kommt dann auch die erste zeile aus der datei
-
die funktion an sich sollte funktionieren. aber das ungeschickte an diesen funktionen ist dass die anzahl der zeilen in der datei immer mit der in der funktion festgelegten uebereinstimmen muessen.
Dauermuede schrieb:
es wurde nur der nachname zufällig bestimmt... "GivenName" blieb immer leer
laesst darauf hinweisen das sich in der datei weniger eintraege befinden als in den funktionen angegeben. ich gehe mal davon aus das 'Name' ein string ist-kein char array.
-
ja, "Name" ist als string definiert... ist da z.b. char[20] eher angebracht?
wie sollte ich es denn sonst machen, damit nur eine einzige zeile gelesen wird? ich brauch ja nur einen namen...
achso... die txt-datei hat die namen lediglich untereinander angeordnet... bringts da vielleicht was, semikolons nach jeder zeile einzufügen?
mfg thomas
-
und "durchschnitt" wäre dann average - wenn schon denn schon...
-
also ich werd aus dev-cpp nich schlau...
auf einmal zeigt der compiler mir fehlermeldungen...z.b. meckert er jetzt bei
using namespace ios;17 expected namespace-name before ';' token
17 `<type error>' is not a namespacedann folgendes:
66
ran_Name' undeclared (first use this function) 73void ran_Name()' used prior to declaration
78 `Name' undeclared (first use this function)
-
das_brot schrieb:
und "durchschnitt" wäre dann average - wenn schon denn schon...
hehe ja... eigentlich schon

aber als ich den kommentar geschreiben hab is mir ums verrecken "average" nich mehr eingefallen...
danach war ich dann zu faul
um nach dem wort zu suchen 
mfg thomas
edit: --> danke dir!

-
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.