2013-08-14 9 views
16

devo classe sotto:errore C2220: avvertimento trattato come errore - generato alcun file di 'oggetto'

class Cdata12Mnt 
{ 
public: 
    char IOBname[ID1_IOB_PIOTSUP-ID1_IOB_TOP][BOADNAM_MAX + 4]; 
    char ExIOBname[ID1_MAX_INF-ID1_EXIOB_U1TOP][BOADNAM_MAX + 4]; 
    char cflpath[256]; 
    char basetext[256]; 
    UINT database[ID1_MAX_INF]; 
    int State; 

public: 
    char SelectPath[256]; 

public: 
    int GetIOBName(int slt,char *Name); 
    Cdata12Mnt(char *SelectPath); 
    virtual ~Cdata12Mnt(); 
    int  GetValue(int id); 
    int  GetState() { return State; } 
}; 

E mi hanno funzione come muggito:

Cdata12Mnt::Cdata12Mnt(char *SelectPath) 
{ 
    SCTReg reg; 
    char buf[256], *cpnt, *npnt, *bpnt1, *bpnt2; 
    char *startcode[] = {"CNTL_CODE ","SEGMENT "}; 
    char *stopcode = {"END_CNTL_CODE "}; 
    FILE *fp; 
    int  ii, infl; 

    State = 0; 

    for (ii = 0; ii < (ID1_IOB_PIOTSUP - ID1_IOB_TOP); ii++) { 
     strcpy(IOBname[ii], ""); 
    } 

    for (ii = 0; ii < (ID1_MAX_INF-ID1_EXIOB_U1TOP); ii++) { 
     **strcpy(ExIOBname[ii], "");** 
    } 

    sprintf(cflpath, "%s\\%s", SelectPath, CDATAFL); 

    if ((fp = fopen(cflpath,"r"))!=NULL) { 
     for (ii = 0, infl = 0; fgets(buf, 256, fp) != NULL;) { 
      if (infl == 0 && strncmp(buf, startcode[0], strlen(startcode[0])) == 0) { 
       if ((cpnt = strchr(&buf[strlen(startcode[0])],*startcode[1])) != NULL) { 
        if (strncmp(cpnt,startcode[1], strlen(startcode[1])) == 0) { 
         infl = 1; 
         continue; 
        } 
       } 
      } 

      if (infl == 0) { 
       continue; 
      } 

      if (strncmp(buf,stopcode,strlen(stopcode))==0) { 
       if (ii == ID1_EXIOB_U1TOP) { 
        for (int nDataNumber = ii; nDataNumber < ID1_MAX_INF; nDataNumber++) { 
         database[nDataNumber] = 0; 
        } 
       } 

       infl = 0; 
       continue; 
      } 

      if (strncmp(&buf[14], " DD ", 4) == 0) { 
       if ((cpnt=strchr(buf, ';')) != NULL) { 
        *cpnt = '\0'; 
       } 

       if (ii >= ID1_IOB_TOP && ii < ID1_IOB_PIOTSUP) { 
        if ((bpnt1 = strchr(cpnt + 1,'(')) != NULL && (bpnt2=strchr(cpnt + 1,')'))!=NULL && bpnt1 < bpnt2) { 
         *bpnt2 = '\0'; 
         *(bpnt1 + BOADNAM_MAX + 1) = '\0'; 
         strcpy(IOBname[ii-ID1_IOB_TOP], bpnt1 + 1); 
        } 
       } 

       if (ii >= ID1_EXIOB_U1TOP && ii < ID1_MAX_INF) { 
        if ((bpnt1 = strchr(cpnt + 1, '(')) != NULL && (bpnt2=strchr(cpnt+1,')'))!=NULL && bpnt1 < bpnt2) { 
          *bpnt2='\0'; 
          *(bpnt1+BOADNAM_MAX+1)='\0'; 
          strcpy(ExIOBname[ii-ID1_EXIOB_U1TOP], bpnt1 + 1); 
        } 
       } 

       for (cpnt = &buf[18]; cpnt != NULL;) { 
        if ((npnt=strchr(cpnt, ',')) != NULL) 
         *npnt='\0'; 
       } 

       if (strchr(cpnt,'H')!=NULL) { 
        sscanf(cpnt,"%XH",&database[ii]); 
       } else { 
        database[ii]=atoi(cpnt); 
       } 

       ii++; 
       cpnt = npnt; 

       if (cpnt != NULL) { 
        cpnt++; 
       } 
      } 
     } 
    } 

    fclose(fp); 
} else { 
    State=-1; 
} 

Quando compilo questa funzione visiva Studio 2008, mi dà errore a strcpy(IOBname[ii],""); come muggito.

errore C2220: avvertimento trattato come errore - generato alcun file 'oggetto'

Come risolvere questo errore?

+3

Le impostazioni del progetto contengono un flag che indica al compilatore di considerare gli avvertimenti come errori. Disattiva quella bandiera e avrai solo l'avviso originale (qualunque cosa sia). –

+1

E a proposito, perché hai una vecchia stringa in stile C in un progetto C++? Usa ['std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string), funzionerà molto meglio a lungo termine. Inoltre, al posto dei vecchi array in stile C, usa ['std :: array'] (http://en.cppreference.com/w/cpp/container/array) (o [' std :: vector'] (http : //en.cppreference.com/w/cpp/container/vector)). –

+2

Risolvi i tuoi avvisi e costruirà – paulm

risposta

9

Vai a project properties -> configurations properties -> C/C++ -> treats warning as error -> No (/WX-).

+17

Quindi la tua soluzione è: "ignorare ciecamente tutti gli avvisi"? – ereOn

+7

@mojtaba setoodeh, ignorare gli avvisi non è una correzione, ma un bypass. – TheFrancisOne

+2

Non è una soluzione valida! – vishal

2

Come nota a margine, è possibile abilitare/disabilitare singoli avvisi utilizzando #pragma. Si può avere uno sguardo alla documentazione here

Dalla documentazione:

// pragma_warning.cpp 
// compile with: /W1 
#pragma warning(disable:4700) 
void Test() { 
    int x; 
    int y = x; // no C4700 here 
    #pragma warning(default:4700) // C4700 enabled after Test ends 
} 

int main() { 
    int x; 
    int y = x; // C4700 
} 
15

L'errore dice che un avviso è stato trattato come un errore. Quindi il tuo problema è un messaggio di avvertimento! Controllali e sistemali.

Nel caso in cui non si sa come trovarli: Aprire il Error List (View>Error List) e fare clic su Warning.

4

Questo messaggio di errore è molto confuso. Ho appena fissato le altre 'avvertimenti' nel mio progetto e ho davvero avuto solo un (semplice):

avvertimento C4101: 'i': senza riferimenti variabile locale

Dopo ho commentato questo inutilizzato i e compilato, l'altro errore è andato via.

+4

Confermo che ho avuto un problema simile oggi. Aveva un avvertimento "Unreachable code" da qualche parte più questo "no" oggetto confuso generato "confuso". La correzione dell'avviso irraggiungibile ha eliminato anche la seconda. Tipo di strano. – Wurmloch