2011-06-13 4 views
1
#include <iostream> 
using namespace std; 

int myFunc (unsigned short int x); 

int main() 
{ 
    unsigned short int x, y; 
    x=7; 
    y = myFunc(x); 
    std::cout << "x:" << x << "y: " << y << "\n"; 
    return 0; 
} 

int myFunc (unsigned short int x) 
{ 
    return (4 * x); 
} 

Maintenant, ce code^fonctionne, mais quand je changeC++: Confused quelque chose sur les fonctions

y = myFunc(x); 

dans

y = myFunc(int); 

il ne fonctionnera plus, pourquoi est-ce?

+3

Pourquoi cela fonctionnerait-il? Qu'attendez-vous qu'il fasse? – Andrei

Répondre

1

C'est parce que le compilateur attend la valeur de type unsigned short int, mais vous avez passé un typeint. Qu'espériez-vous obtenir? Le résultat de 4*int est indéfini.

Vous pouvez transmettre des types lorsque vous utilisez des modèles. Jetez un oeil sur l'exemple suivant:

// Here's a templated version of myFunc function 
template<typename T> 
T myFunc (unsigned short int x) 
{ 
    return (4 * x); 
} 

... 

y = myFunc<int>(x); // here you can pass a type as an argument of the template, 
// but at the same moment you need to pass a value as an argument of the function 
5
y =myFunc(int); 

Cette expression n'est pas valide. int est un type, vous ne pouvez pas passer un type en tant qu'argument à une fonction.

3

si
x = 7;

y = myFunc (x); est égal à y = myFunc (7);

si vous utilisez int, quelle est sa valeur? l'erreur se produit donc

+0

ordinateur exécute comme vous résolvez vos équations d'algèbre .. :) – Jagadeesan

2

Parce que int est un mot réservé. Et même si ce n'était pas le cas, vous n'avez pas déclaré (et défini) l'identificateur appelé "int".

Questions connexes