2017-10-09 1 views
1

Si je supprime mon prototype de fonction et déplace la fonction du bas vers le haut, tout fonctionne correctement et la fonction peut accepter un float ou un int comme type de données. N'êtes-vous pas normalement supposé prototyper des fonctions? En outre, je suis un peu curieux de savoir pourquoi la fonction ne fonctionne que si elle est au sommet. Je suis à peu près certain que c'est une question de cadrage, mais cela me dépasse pour une raison quelconque.Pourquoi ce prototype de fonction de modèle ne fonctionne-t-il pas correctement?

#include <iostream> 
#include <math.h> 
#include <iomanip> 

using namespace std; 

template <class tyler>    // function template 
tyler Addition(tyler, tyler);  // function prototype 


int main() 
{ 
setprecision(2); //limits decimal output to 2 places 
int num1, num2; 
float num3, num4; 

cout << "Enter your first number: \n"; 
cin >> num1; 
cout << "Enter your second number: \n"; 
cin >> num2; 
cout << num1 << " + " << num2 << " = " << Addition(num1, num2); 

cout << "Enter your third number: (round 2 decimal places, e.x. 7.65) \n"; 
cin >> num3; 
cout << "Enter your fourth number: (round 2 decimal places, e.x. 7.65 \n"; 
cin >> num4; 
cout << num3 << " + " << num4 << " = " << Addition(num3, num4); 

cin.clear();    // Clears the buffer 
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // Ignores anything left in buffer 
cin.get();     // Asks for an input to stop the CLI from closing. 
return 0; 
} 

tyler Addition(tyler num1, tyler num2) 
{ 
    return (num1 + num2); 
} 

Répondre

0

est ici la mise en œuvre de la fonction comme il est écrit:

tyler Addition(tyler num1, tyler num2) 
{ 
    return (num1 + num2); 
} 

Notez que ceci est pas une fonction de modèle, et ainsi de C++ traite comme si elle se fait dans les arguments de type tyler plutôt que de traiter tyler comme un espace réservé.

Si vous voulez définir la fonction de modèle plus tard, c'est bien! Il suffit de répéter l'en-tête du modèle:

/* Prototype! */ 
template <typename tyler> 
tyler Addition(tyler num1, tyler num2) 


/* ... other code! ... */ 


/* Implementation! */ 
template <typename tyler> 
tyler Addition(tyler num1, tyler num2) 
{ 
    return (num1 + num2); 
} 
+0

Je suivais le tutoriel de la fonction modèle de thenewboston et c'était la même chose seulement il ne l'a pas prototype. Je prototypais normalement mes fonctions, alors j'essayais de trouver un moyen de le faire. A part ça, mon code est exactement le même que le sien. En plus de cela, est-ce que je peux supposer que la deuxième boîte de code que vous m'avez donnée serait un bon exemple de fonction de template? –

+0

Je vais être honnête, pas de tutoriel vidéo de C++ que j'ai vu correctement enseigne les bases et les parties avancées, bien sûr inclus. Je suggère de prendre un livre sur C++ à la place. – user975989

+0

Je viens de mettre à jour ma réponse pour indiquer plus clairement que vous pouvez garder votre prototype * et * définir la fonction du modèle plus tard. Vous avez juste besoin d'inclure l'en-tête du modèle dans les deux cas. – templatetypedef