2010-11-28 10 views
0
class Rectangle { 
    int x, y; 
    public: 
    void set_values (int,int); 
    int area (void) {return (x*y);} 
}; 

void Rectangle::set_values (int a, int b) { 
    x = a; 
    y = b; 
} 

J'ai cette classe à l'intérieur de la fonction d'une autre classe son erreur donnant: une fonction définition n'est pas autorisée ici avant « { » jeton pourriez-vous me dire pourquoi?C++ définition de classe

Répondre

0

Vous pouvez créer un type dans la portée de la fonction, mais vous ne pouvez pas déclarer la fonction ici. Vous pouvez le faire:

class Rectangle { 
    int x, y; 
    public: 
     void set_values (int a, int b) { x = a; y = b; } 
     int area (void) { return (x*y); } 
}; 

Mais, pourquoi ne pas déclarer Rectangle normalement? Il semble assez utile de vouloir utiliser dans d'autres fonctions.

1

Vous ne pouvez pas écrire une définition de fonction dans une autre fonction en C++. Si quoi que ce soit, vous devrez écrire l'implémentation dans votre déclaration de classe, comme vous l'avez fait avec la fonction area.

1

Vous devez séparer votre déclaration (.h) de votre implémentation (.cpp). Si vous souhaitez implémenter une fonction dans votre fichier de déclaration (nomally pour des fonctions simples) vous devez utiliser le mot réservé en ligne : Je crois que votre utilisation de « en ligne » est ici redondant

Rectangle.h 
class Rectangle { 
    int x, y; 
    public: 
    void set_values (int,int); 
    inline int area (void) {return (x*y);} 
}; 

Rectangle.cpp 
#include Rectangle.h 

void Rectangle::set_values (int a, int b) { 
    x = a; 
    y = b; 
} 
+0

; Les fonctions membres définies dans le corps de la classe sont implicitement en ligne. – Dan

+0

@Dan: Pour des fonctions simples comme celle mentionnée ici, inline est le style préféré en raison de la performance. Voir cette question à propos de cette question: http://stackoverflow.com/questions/145838/benefits-of-inline-functions-in-c – ArBR

Questions connexes