2009-05-26 7 views
2

je teste un code en C# à partir de Visual Studio Express 2008:Pourquoi ce code ne compile-t-il pas? - affectation d'objet, appel, incrément, décrément et nouveaux peuvent être utilisés comme instruction

delegate void Hm(int k); 

static void Main(string[] args) 
{ 
    char[] m = new char[10]; 

    m[0] = 'H'; m[5] = 'M'; 
    m[1] = 'o'; m[6] = 'u'; 
    m[2] = 'l'; m[7] = 'n'; 
    m[3] = 'a'; m[8] = 'd'; 
    m[4] = ' '; m[9] = 'o'; 

    unsafe { fixed (char* p = m) { Hm H = (k) => recurd(k, p); H(0); } } 
    Console.ReadLine(); 
} 

static unsafe int recurd(int i, char* p) 
{ 
     Console.WriteLine(p[i]); 
     if (i == 10) return 0; else return recurd(i + 1, p);  
} 

Il compile parfaitement, mais si je fais un peu de changement dans la fonction « recurd »:

static unsafe int recurd(int i, char* p) 
{ 
     Console.WriteLine(p[i]); 
     i == 10 ? 0 : recurd(i + 1, p); 
    // if (i == 10) return 0; else return recurd(i + 1, p);  
} 

Je suis une erreur qui dit: « Juste les expressions d'affectation d'objets, d'appel, incrément, décrément et nouveaux peuvent être utilisés comme instruction » (C'est une traduction de l'espagnol).

Pourquoi j'obtiens cette erreur? Comment puis-je le réparer?

Répondre

12

Vous êtes absent le mot-clé "retour":

return i == 10 ? 0 : recurd(i + 1, p); 
+0

c'est vrai, j'ai essayé avec le mot "retour" et j'obtiens la même erreur :( –

+0

je l'ai résolu comme tu as dit ça marche, merci –

0
i = (i == 10) ? 0 : recurd(i + 1, p); 
9

Essayez ceci:

static unsafe int recurd(int i, char* p) 
{ 
     Console.WriteLine(p[i]); 
     return i == 10 ? 0 : recurd(i + 1, p); 
} 

Il se plaint parce que vous ne faites rien avec le résultat de l'expression.

+0

+1 pour être la seule réponse expliquant la raison du message d'erreur –

1

Celui

static unsafe int recurd(int i, char* p) 
{ 
     Console.WriteLine(p[i]); 
     i == 10 ? 0 : recurd(i + 1, p); 
    // if (i == 10) return 0; else return recurd(i + 1, p);  
} 

ne fonctionnera pas parce qu'il ne retourne rien.

1

Devrait être: return i == 10? 0: recurd (i + 1, p);

Vous avez oublié d'ajouter votre retour dans

0

J'ai essayé. i = i == 10? return 0: return recurd (i + 1, p);

et aussi i == 10? return 0: return recurd (i + 1, p);

Et j'ai des erreurs. J'ai essayé: return i == 10? 0: recurd (i + 1, p);

Et ça marche !! Merci Joel! Merci Jonathan! Mon erreur a été de penser que la valeur était automatique et que le mot "return" n'était pas nécessaire.

+1

Si l'une des réponses a résolu le problème, vous devez cocher la case pour l'accepter –

+0

Comment faire, je suis un débutant ici :) –

+0

Je l'ai fait. Merci pour le conseil. –

0

J'ai essayé: i = i == 10? return 0: return recurd (i + 1, p);

et aussi i == 10? return 0: return recurd (i + 1, p);

Et j'ai des erreurs.

Mais j'ai essayé: return i == 10? 0: recurd (i + 1, p);

Et ça marche !! Merci Joel! Merci Jonathan! Mon erreur a été de penser que la valeur était automatique et que le mot "return" n'était pas nécessaire.

Questions connexes