Errore in visual studio ma non in codeblocks

di il
4 risposte

Errore in visual studio ma non in codeblocks

Buongiorno sono nuovo del forum e sto imparando c++ come autodidatta dopo che un decennio fa avevo provato la carriera di programmatore java andata male.

il mio problema è che sto visionando un programma già compilato di gestione delle spese e forniscono il codice che ho prontamente incollato in visual studio 15 ... alla riga :
int nRec = f.tellg()/sizeof(tSpesa);
compare il seguente errore:
f:\lezioni cpp\camuso classi indici\gestione spese\gestione spese\my_function.h(114): warning C4244: '=': conversione da 'std::streamoff' a 'int'. Possibile perdita di dati.

inoltre è presente un altro errore a fine programma:
>gestione spese.rc(3): fatal error RC1015: cannot open include file 'resource.h'

copiato lo stesso programma su code blocks tutto funziona alla perfezione . qualcuno sa perchè?

se c'è bisogno posto il link della pagina in cui è contenuto il codice
Grazie mille

4 Risposte

  • Re: Errore in visual studio ma non in codeblocks

    La question e' compilcata:

    Visual Studio ha si un compilatore C++, MA NON E' lo stesso di CodeBlock.
    Dirai: ovvio!

    No, la cosa e' peggiore di quello che pensi!
    Il compilatore della Microsoft e' stato fatto dalla Microsoft, specificatamente per Window, MENTRE il compilatore di CodeBlock e' un compilatore per Linux di cui e' stato fatto il porting in WIndows.

    Non solo, i due compilatori sono diversi e supportano specifiche del linguaggio diverse, ma hanno anche librerie standard DIVERSE.

    Ad essere fortunati, saranno compatibili tra di loro al 75% (probabilmente anche meno), ma il rimanente 25% fa si che fondamentalmente il codice scritto con un compilatore non possa essere usato con l'altro : vedasi la mancanza di file include in uno, presenti nell'altro.
  • Re: Errore in visual studio ma non in codeblocks

    Grazie per la risposta! ma quindi un consiglio per me che sono autoditatta ne avresti?

    un altro problema lo avevo avuto con la data corrente perchè visual studio mi dice :

    f:\lezioni cpp\camuso classi\data.cpp(13): error C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.


    FUNZIONE
    tm* Data::data_corrente()   //verra creato un oggetto di tipo TM quindi contentenre ora giorno mese anno corrente, di nome data_corrente() che è una funzione richiamabile  quindi con data_corrente() -> tm_mon posso avere mese
    {
     time_t tempo_secondi = time(nullptr);
     return localtime(&tempo_secondi);
    }
    COSTRUTTORE
    Data::Data(int gg, int mm, int aa)
    {
      if ( valida(gg, mm, aa) )
      {
        giorno = gg;
        mese = mm;
        anno = aa;
      }
      else  //impostiamo la data corrente
      {
        //tm* oggi = data_corrente();  //non serve perche è gia assegnata ad una variabile static
        giorno = oggi->tm_mday;
        mese = oggi->tm_mon+1;
        anno = oggi->tm_year+1900;
      }
    }
    
  • Re: Errore in visual studio ma non in codeblocks

    Puoi indicare a Visual C++ di ignorare questi warning di sicurezza (che tuttavia dovresti tenere in considerazione) con una linea

    #pragma warning(disable:4996)

    prima del main
  • Re: Errore in visual studio ma non in codeblocks

    f:\lezioni cpp\camuso classi\data.cpp(13): error C4996: 'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    Quello è solo un warning (avviso) che si comporta come un errore. Si riferisce al fatto che la funzione localtime non è sicura, ovvero se passi dei parametri sbagliati se ti va bene il tuo programma va in segfault, se ti va male permette l'esecuzione di codice arbitrario (ovvero lasci un buco di sicurezza).
    Se non vuoi usare localtime_s devi dare il flag di compilazione _CRT_SECURE_NO_WARNINGS.
Devi accedere o registrarti per scrivere nel forum
4 risposte