2013-08-14 14 views
16

Ich habe unten Klasse:Fehler C2220: als Fehler behandelt Warnung - kein ‚Objekt‘ Datei erzeugt

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; } 
}; 

Und ich habe Funktion als Gebrüll:

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; 
} 

Wenn ich diese Funktion zu Visual kompilieren Studio 2008, es gibt mir Fehler bei strcpy(IOBname[ii],""); wie unten.

Fehler C2220: Warnung als Fehler behandelt - kein 'Objekt' Datei

erzeugt

Wie um diesen Fehler zu beheben?

+3

Ihre Projekteinstellungen enthalten ein Flag, das den Compiler anweist, Warnungen als Fehler zu behandeln. Schalten Sie diese Flagge aus und Sie erhalten nur die ursprüngliche Warnung (was auch immer das ist). –

+1

Und übrigens, warum haben Sie alte C-style Zeichenfolge in einem C++ Projekt? Verwenden Sie ['std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string), es wird auf lange Sicht viel besser funktionieren. Anstelle von alten C-artigen Arrays verwenden Sie auch ['std :: array'] (http://en.cppreference.com/w/cpp/container/array) (oder [' std :: vector'] (http : //en.cppreference.com/w/cpp/container/vector)). –

+2

Fix Ihre Warnungen und es wird – paulm

Antwort

9

Gehen Sie zu project properties -> configurations properties -> C/C++ -> treats warning as error -> No (/WX-).

+17

Ihre Lösung lautet also: "blind alle Warnungen ignorieren"? – ereOn

+7

@mojtaba setoodeh, Warnungen ignorieren ist keine Lösung, sondern eine Umgehung. – TheFrancisOne

+2

Keine gültige Lösung! – vishal

2

Als Randbemerkung können Sie einzelne Warnungen aktivieren/deaktivieren, indem Sie #pragma verwenden. Sie können here

Aus der Dokumentation in der Dokumentation einen Blick:

// 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

Der Fehler besagt, dass eine Warnung als Fehler behandelt wurde. Daher ist dein Problem eine Warnmeldung! Überprüfen Sie sie und beheben Sie diese.

Falls Sie nicht wissen, wie Sie sie finden können: Öffnen Sie die Error List (View>Error List) und klicken Sie auf Warning.

4

Diese Fehlermeldung ist sehr verwirrend. Ich regelte nur die anderen 'Warnungen' in meinem Projekt und ich hatte wirklich nur eine (einfache):

Warnung C4101: 'i': nicht referenzierte lokale Variable

Nachdem ich diese nicht verwendeten i kommentiert und kompilierte es, der andere Fehler ging weg.

+4

Ich bestätige, dass ich heute ein ähnliches Problem hatte. Hatte irgendwo eine "Unreachable code" Warnung und diese verwirrende "no 'object file generated'". Das Fixieren der nicht erreichbaren Warnung beseitigte auch die zweite. Irgendwie seltsam. – Wurmloch