2017-05-10 6 views
-1

Ich bin neu in C++ und begann vor kurzem mit Klassen arbeiten für eine Schule excepcice. Ich kann wirklich nicht sehen, was falsch ist und nachdem ich ein Objekt "player" zur Hero-Klasse erstellt habe, kann ich dieses Objekt später nicht mehr in der "Hauptmenü" -Funktion verwenden, um eine Methode aufzurufen, weil ich den "identifier is undefined" -Fehler bekomme!Objekt ist undefiniert in Funktion

Irgendwelche Vorschläge?

#include "stdafx.h" 
#include <iostream> 
#include <string> 
#include <cstdlib> 
using namespace std; 

class Hero 
{ 
    private: 
     //member variables 
     string playername; 

    public: 
     //constructor 
     Hero(string name) 
     { 
      playername = name; 
     } 

     string getName() 
     { 
      return playername; 
     } 

}; 

//start 1 
void mainMenu() 
{ 
    cout << " - - - |" << player.getName() << "- - - \n"; 
} 

void setPlayer() 
{ 
    string name; 
    cout << "Hello, what is your name? " << endl; 
    getline(cin, name); 

    Hero player(name); 
    mainMenu(); 
} 

int main() 
{ 
    int selection; 

    cout << "Shadow of darkness\n "; 

    cout << "1.) Start "; 
    cout << "2.) Exit "; 

    cin >> selection; 

    if (selection == 1) 
     setPlayer(); 

    else if (selection == 2) 
     exit (0); 

    else 
     main(); 

    return 0; 
} 
+2

Holen Sie sich ein [Buch] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) und überspringen Sie keine Kapitel. Und drücken Sie die Return-Taste seltener und systematischer. – LogicStuff

+0

Ihre Frage fällt in eine Kategorie, die [diesen Link] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) zu einem Muss macht. – StoryTeller

+1

'player' wird im Rahmen von' setPlayer' deklariert, Bezeichner sind an den Gültigkeitsbereich gebunden, in dem sie deklariert sind. Es sieht so aus, als ob du eine Menge Informationen verpasst hast, wenn du den anderen Code ansiehst. Das Lernen mit "_and_ guessing" funktioniert nicht wirklich in C++. – George

Antwort

0

OK, ruft main() von main() ist verboten (wie erklärt here), so tun es nicht.

Hier ein typisches Beispiel mit Ihrer Klasse ist (die Klasse ist cool, wie Sie es haben, ich eine Initialisiererliste für Spaß gerade hinzugefügt):

#include <iostream> 
#include <string> 
using namespace std; 

class Hero 
{ 
    private: 
     //member variables 
     string playername; 
    public: 
     //constructor 
     Hero(string name) : playername(name) 
     { 
     } 

     string getName() 
     { 
      return playername; 
     } 
}; 

int main() 
{ 
    Hero player("Daniel"); 
    cout << "Player's name: " << player.getName() << std::endl; 
    return 0; 
} 

Ausgang:

Spielername: Daniel

Basierend darauf, versuchen Sie, Ihre Logik zu arbeiten und alle Arten von Sachen zu tun, nach denen Sie sich sehnen (nach dem Lesen einiger Bücher/Tutorials)!

Verwandte Themen