2011-04-29 3 views
3
#include <cstdio> 
#include <cstdlib> 
#include <iostream> 

using namespace std; 

class Student; 
void function_A(Student& s) 

class Student { 
    void function_B() { 
     ::function_A(*this); 
    } 
    int courses; 
}; 

void function_A(Student& s) 
{ // line 18 (where error is occurring) 
    s.courses = 1; 
} 

int main() 
{ 
    Student s; 
    s.function_B(); 
    return 0; 
} 

L'erreur que je reçois est comme suit:Essayer de définir une fonction, mais je reçois « variable ou champ` function_A » déclarée nulle »

(ligne 18) De nouveaux types peuvent ne pas être défini dans un type de retour.

+0

+1. C'est plus délicat que ça en a l'air. J'ai édité le titre pour le rendre plus descriptif. –

+1

Bienvenue dans StackOverflow! Bonne question, mais s'il vous plaît ne changez pas votre code pendant que les gens répondent encore à votre question. –

Répondre

6

Une partie de votre problème est que vous utilisez le type Student avant qu'il ne soit défini en faisant un paramètre à function_A. Pour faire ce travail, vous devez

  1. Ajouter une déclaration avant function_A
  2. commutateur function_A prendre un pointeur ou référence
  3. Déplacer function_A après Student. Cela est nécessaire pour membre courses est définie avant d'accéder
  4. Ajouter un ; après la fin de la définition class Student

Essayez le

suivant
class Student; 
void function_A(Student& s); 

class Student { 
    // All of the student code 
}; 

void function_A(Student& s) { 
    s.courses = 1; 
} 
+0

En plus de cela, un ';' est nécessaire après la définition de la classe. – AnT

+0

@AndreyT n'a pas remarqué cela. Mise à jour de la réponse Merci! – JaredPar

+0

Merci! cela fonctionne maintenant – google11video

2

Vous devez réexpédier déclarer Student.

Lieu

class Student; 

avant function_A.

+1

Une déclaration forward n'est pas non plus suffisante, puisque l'objet Student est transmis par valeur, et function_A référence une variable membre de la classe Student. –

Questions connexes