2012-09-05 6 views
0

Tout d'abord, je sais qu'il y a d'autres questions qui sont essentiellement les mêmes que celle-ci, mais aucune des réponses ne semble fonctionner pour moi. Je suis assez nouveau pour C++ et la programmation en général alors s'il vous plaît décrire aussi simplement que possible, merci. Donc j'essaye de faire un simple jeu de texte et j'ai quelques fichiers, mais quand j'essaie d'utiliser une méthode d'une classe, cela provoque une erreur qui dit que l'expression doit avoir un type de classe.erreur: expression doit avoir le type de classe

Voici le code.

main.cpp

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


//main function 
int main (void) 
{ 
//title screen 
cout<< " _____ _   _  _____   \n"; 
cout<< "| __|_|_____ ___| |___ | __ |___ ___ \n"; 
cout<< "|__ | |  | . | | -_| | -| . | . |\n"; 
cout<< "|_____|_|_|_|_| _|_|___| |__|__| _|_ |\n"; 
cout<< "    |_|    |_| |___|\n"; 
cout<< "\n\n  Enter any # to start \n "; 

int start; 
anumber: 
cin>> start; 

if (start < 0 || start > 0) 
{ 
    cout<< "\nWelcome to Sam Acker's simple rpg game!\n"; 
} 

Warrior your_warrior(int health , int armor , int weapon); 
your_warrior.warrior_name_function; //This is the line with the error 


int exit; 
cin>> exit; 
return 0; 
} 

Warrior.h

#include <string> 
#include <iostream> 
class Warrior 
{ 
private: 
int health; 
int weapon; 
int armor; 
std::string warrior_name; 

public: 
int attack(); 
int warrior_name_function(); 

Warrior(int health , int weapon , int armor); 
~Warrior(); 
}; 

Warrior.cpp

#include <iostream> 
#include <string> 
#include <ctime> 
#include <cstdlib> 
#include "Warrior.h" 


int Warrior::warrior_name_function() 
{ 
std::cout<< "What would you like to name you warrior?\n"; 
std::cin>> Warrior::warrior_name; 
return 0; 
} 


int Warrior::attack() 
{ 
return 0; 
} 



Warrior::Warrior(int health , int armor , int weapon) 
{ 
health == 100; 
armor == 1; 
weapon == 16; 
} 


Warrior::~Warrior() 
{} 
+7

Restez simple, marin: Avons-nous vraiment besoin de voir votre écran de démarrage dans cet exemple de code? Gardez-le en équilibre, gardez-le maigre, et les visiteurs deviennent plus vifs. –

+0

@KerrekSB désolé à ce sujet. un peu nouveau ici. Merci pour le conseil. – katana7070

+0

Quelle est la raison du label "anumber:"? –

Répondre

4

Cette ligne principale()

Warrior your_warrior(int health , int armor , int weapon); 

semble que vous déclarez une fonction, pas la création d'une instance de la classe Warrior. Vous devriez l'appeler avec des valeurs concrètes de vos variables comme celui-ci pour créer un

Warrior your_warrior(10,32,2); 

ou mieux encore créer certaines variables, définir leurs valeurs et passer à la fonction. Ensuite, appelez

your_warrior.warrior_name_function(); 

votre erreur de compilation est parce qu'il ne reconnaît pas your_warrior comme une instance de classe, mais comme une déclaration d'une fonction.

+0

Merci beaucoup, ça m'a rendu fou. – katana7070

0

On dirait que vous avez oublié les parenthèses lorsque vous appelez la fonction nom:

your_warrior.warrior_name_function(); 

Je vous suggère également de supprimer simplement le destructeur pour la classe Warrior: il n'a rien à nettoyer.

+0

ne l'a toujours pas réparé. Merci d'être si rapide cependant. Merci aussi pour la pointe du destructeur. – katana7070

0
Warrior your_warrior(int health , int armor , int weapon); 

Cette ligne déclare une fonction named your_warrior qui prennent trois arguments de type int et retourne un objet de type Warrior.

Si vous retirez les trois int s, cela fonctionnera beaucoup mieux. <g>

Et, bien sûr, ajoutez les parenthèses pour l'appel de fonction dans la ligne suivante.

+0

qui provoque des erreurs pour moi. – katana7070

+0

Oui, j'ai supposé, sans regarder, que vous aviez défini des variables avec ces trois noms. Comme l'a suggéré @ mathematician1975, vous pouvez appeler ce constructeur avec des valeurs littérales si vous le souhaitez. –

+0

Merci pour la suggestion de toute façon, j'apprécie vraiment l'aide. – katana7070

Questions connexes