2016-01-23 2 views
-6

J'ai donc rencontré ce problème en essayant de créer un jeu basé sur du texte à jouer au travail. : PAutoriser l'utilisateur à nommer un objet de classe

Je voulais que les utilisateurs puissent créer leur nouveau caractère, et l'objet de caractère serait nommé, peu importe leur entrée. Je sais que je peux juste avoir une variable de chaîne qui contient le nom et utiliser un compteur, mais même alors, puis-je faire changer le programme? Voici un exemple.

(dans cette situation il y a un menu qui utilise le cas de commutation, et un autre fichier avec la classe « caractère »)

case: 1 
    string tempName; 
    cout << "Please enter the name of your new character." << endl; 
    cin >> tempName; 
    Character tempName(); 
    Character.setName(tempName); 
    cout << "Congratulations! Your character " << Character.getName() << " has  been created." << endl; 
+2

Vous pourriez penser à ** pourquoi ** vous ne pouvez pas faire cela. C'est franchement une idée terrible. –

Répondre

0

Non, cela ne fonctionne tout simplement pas.

Tout d'abord, le compilateur doit connaître tous les noms de variables lors de la compilation du code. Après la compilation, les noms ont disparu et le fichier exécutable contient le code binaire à exécuter. Cela en soi rend impossible de changer les noms plus tard.

Vous avez également quelques autres problèmes dans votre exemple de code, donc je parie que vous recevez pas mal de messages confus du compilateur. Je suis sûr que le compilateur lui-même est assez confus par vos tentatives. :-)

d'abord Character tempName(); ne déclare pas un objet de type Character, mais le () à la fin, il est déclarer une fonction renvoyant un Character.

Le fait que tempName est déjà le nom d'un string ne le rend pas meilleur.

La ligne suivante Character.setName(tempName); est probablement une tentative d'appel d'une fonction pour un type. Tentative intéressante, mais ça ne marche pas comme ça. Les fermetures que vous avez est Character::setName(tempName); si setName est un membre statique de la classe Character. Mais cela affecterait tous les objets de ce type, pas seulement un seul.


Oh, et je suppose que case: 1 est juste une faute de frappe pour case 1:.