2010-04-10 7 views
2

J'ai essayé de revenir au codage pendant un moment, alors j'ai pensé que je commencerais avec un simple SDL, maintenant, sans le fichier i/o, Cela compile bien, mais quand je jette le code stdio, il commence à lancer des erreurs. Ce dont je ne suis pas sûr, je ne vois aucun problème avec le code lui-même, cependant, comme je l'ai dit, je pourrais aussi bien être un débutant, et je me suis dit que je viendrais ici avec quelqu'un avec un peu plus d'expérience ce genre de chose à regarder.Problèmes avec le compilateur sur VC++ 2008 Express, le code apparemment correct génère des erreurs

Je suppose que ma question se résume à: "Pourquoi ne pas compiler sous Microsoft Visual C++ 2008 Express?"

J'ai joint le journal des erreurs en bas de l'extrait de code. Merci d'avance pour votre aide.

#include "SDL/SDL.h" 
#include "stdio.h" 

int main(int argc, char *argv[]) 
{ 
    FILE *stderr; 
    FILE *stdout; 

    stderr = fopen("stderr", "wb"); 
    stdout = fopen("stdout", "wb"); 

    SDL_Init(SDL_INIT_EVERYTHING); 
    fprintf(stdout, "SDL INITIALIZED SUCCESSFULLY\n"); 
    SDL_Quit(); 
    fprintf(stderr, "SDL QUIT.\n"); 

    fclose(stderr); 
    fclose(stdout); 

    return 0; 
} 

erreurs réelles signalées:

main.cpp(6) : error C2090: function returns array 
main.cpp(6) : error C2528: '__iob_func' : pointer to reference is illegal 
main.cpp(6) : error C2556: 'FILE ***__iob_func(void)' : overloaded function differs only by return type from 'FILE *__iob_func(void)' 
     c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(132) : see declaration of '__iob_func' 
main.cpp(7) : error C2090: function returns array 
main.cpp(7) : error C2528: '__iob_func' : pointer to reference is illegal 
main.cpp(9) : error C2440: '=' : cannot convert from 'FILE *' to 'FILE ***' 
     Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
main.cpp(10) : error C2440: '=' : cannot convert from 'FILE *' to 'FILE ***' 
     Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
main.cpp(13) : error C2664: 'fprintf' : cannot convert parameter 1 from 'FILE ***' to 'FILE *' 
     Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
main.cpp(15) : error C2664: 'fprintf' : cannot convert parameter 1 from 'FILE ***' to 'FILE *' 
     Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
main.cpp(17) : error C2664: 'fclose' : cannot convert parameter 1 from 'FILE ***' to 'FILE *' 
     Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
main.cpp(18) : error C2664: 'fclose' : cannot convert parameter 1 from 'FILE ***' to 'FILE *' 
     Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 
+2

Utilisez 'freopen' pour rediriger' stdout' et vos amis. –

+2

Les en-têtes standard doivent être entourés de supports angulaires: ''. Deuxièmement, en C++, il devrait être: ''. Enfin, quel est le problème avec '' et amis? Ils se sentent tristes. :( – GManNickG

+0

@GMan: +1 pour "Ils se sentent tristes." * Bill rit * –

Répondre

4
#include "SDL/SDL.h" 
#include "stdio.h" 

int main(int argc, char *argv[]) 
{ 
    FILE *stderr; //Invalid names. These are already defined by stdio.h. 
    FILE *stdout; //You can't use them (portably anyway). 

    stderr = fopen("stderr", "wb"); //I'm assuming you actually want files 
    stdout = fopen("stdout", "wb"); //called "stderror" and "stdout". 

    SDL_Init(SDL_INIT_EVERYTHING); 
    fprintf(stdout, "SDL INITIALIZED SUCCESSFULLY\n"); 
    SDL_Quit(); 
    fprintf(stderr, "SDL QUIT.\n"); 

    fclose(stderr); 
    fclose(stdout); 

    return 0; 
} 

Essayez de changer les noms stderr et stdout à autre chose. Je soupçonne que le compilateur se plaint parce que ceux-ci sont déjà définis ailleurs dans la bibliothèque C.

+0

Eh bien, je me sens idiot maintenant, j'ai beaucoup travaillé, merci beaucoup –

+2

@Anthony Clever: Si cela a fonctionné, pouvez-vous me faire une faveur et cliquez sur l'icône de coche à côté de ce poste? :) –

+2

Là nous allons, a dû l'attendre pour me laisser. –

1
  1. Vous n'êtes pas obligé de déclarer, ouvert, ou à proximité stdin, stdout ou stderr, pour vous est déjà fait dans stdio. Si vous utilisez C++, pourquoi ne pas utiliser iostream?
Questions connexes