2011-04-06 5 views
0

J'ai donc une classe LongInt qui aura une nouvelle définition pour les opérateurs + et *. L'initialisation dans le fichier d'en-tête ressemble à:Écrire l'implémentation pour une méthode d'opérateur

friend LongInt operator+(const LongInt& x, const LongInt& y); 
friend LongInt operator*(const LongInt& x, const LongInt& y); 

cependant dans mon dossier de mise en œuvre, où je définir les méthodes trouvées dans l'en-tête, VS ne reconnaît pas l'opérateur + ou la fonction opérateur * comme étant la liste dans l'en-tête. J'utilise le code:

friend LongInt LongInt::operator+(const LongInt& x, const LongInt& y) 
{ 

} 

et

friend LongInt LongInt::operator*(const LongInt& x, const LongInt& y) 
{ 

} 

Toutes les idées pour lesquelles ce code ne fonctionnera pas quand je suis en train de définir les opérateurs?

Répondre

2

Le mot-clé friend est uniquement utilisé lors de la déclaration ou de la définition de l'opérateur à l'intérieur d'une classe; lors de la déclaration de l'opérateur comme friend à l'intérieur de la classe et en la définissant ailleurs, friend n'est utilisé que sur la déclaration et non sur la définition. En outre, les fonctions déclarées friend à l'intérieur d'une classe sont en fait des fonctions libres dans la portée de l'espace de noms, et non des membres de la classe. Ainsi, vos définitions devraient ressembler davantage:

LongInt operator +(LongInt const& x, LongInt const& y) { /*...*/ } 
LongInt operator *(LongInt const& x, LongInt const& y) { /*...*/ } 

Pour plus de matériel de lecture, lire sur la page suivante: C++ FAQ: Friends

+0

Je sais comment utiliser un opérateur, mais je dois changer ce que l'opérateur fait pour répondre à la situation que je vais l'utiliser. dans ce cas, je vais ajouter deux classes personnalisées. – Ctak

+0

@Ctak: Votre question ne montre que des déclarations, pas des définitions (où vous changeriez ce qu'ils font); et votre question précise que vous avez du mal à essayer d'appeler l'opérateur. C'est-à-dire que votre question ne reflète aucunement ce que vous venez de dire. Quelle est votre question ** réelle ** alors? – ildjarn

+0

J'ai modifié la question. Merci! – Ctak

0

Vous surchargeons un opérateur ... vous « appelez » à l'aide de l'opérateur:

LongInt foo; 
LongInt bar; 
LongInt foobar = foo + bar; 
Questions connexes