2017-04-27 6 views
-1

Ich habe diesen Code-Schnipsel aus einem C++ Buch:C++ Struct Puzzle kann nicht kompiliert werden

#include<stdio.h> 
#include<stdlib.h> 

struct S1 
{ 
    const char *s; 
    int i; 
    struct S1 *slp; 
}; 

main() 
{ 
    static struct S1 a[]= {{"abcdef", 1, a+1}, 
        {"ghijkl", 2, a+2}, 
        {"mnopqr", 3, a} }; 

    struct S1 *p = a; 

    printf("a[0].s = %s p-> = %s a[2].slp->s = %s \n", a[0].s, p->s, a[2].slp->s); 

    for(int i=0; i<3; i++) 
    { 
     printf("--a[i].i = %d ", --a[i].i); 
     printf("++a[i].s[3] = %c \n", ++a[i].s[3]); 
    } 
} 

Mit Dev C++ v5.11, ich bin nicht in der Lage es mit einem Fehlercode zu kompilieren:

[Error] increment of read-only location '*(a[i].S1::s + 3u)' 

Lösung wie von @Corristo kommentiert funktioniert.

Danke für die Hilfe alle. Ich werde bessere IDE und Bücher für das nächste Mal bekommen. Danke, @ Tomaz-Canabrava.

+4

Ich denke, dass dieses C++ Buch überhaupt nicht C++ ist ... – Jiahao

+3

Das sieht mehr wie C aus den frühen 90er Jahren als richtig C++. Sie sollten ein besseres C++ Buch bekommen. –

+6

's' ist' const char * ', dann' s [3] 'ist' const char', du kannst '++' nicht darauf anwenden. – songyuanyao

Antwort

6

Stopp mit Dev C++

  • dies ist eine minderwertige IDE in den frühen gemacht 2000 und nie sollte von jemand, noch Universitäten noch Studenten verwendet werden. Einfach ausgedrückt: Es hat mehr Bugs als alles andere. (Leider ist es die IDE der Wahl von fast allen brasilianischen Universitäten, seufz.)

ein Proper C Get ++ Buch

  • Wenn sie sagt, dass es Ihnen alles lehren unter C + +11, es ist kein richtiges C++ Buch und es wird Ihnen in der Regel falsch C++ aus dem Mittelalter lehren (pre C++ 11)

Nicht zu Turbo C++ im Zusammenhang mit etwas Gehen Sie

  • Im Ernst, es gibt Universitäten nach wie vor, dass C zu lehren ++ verwenden.

Es gibt eine LOT gute und kostenlose Bücher, Compiler und IDE um, da man in den Fenstern sind, würde ich eines dieser Gratis IDEs empfehlen:

  • Microsoft Visual Studio Express
  • Qt Creator
  • Eclipse-CDT

Das zumindest geben Ihnen einen modernen C++, nicht fr aus der Steinzeit. Gute Studie.

+0

Code :: Blocks ist gut genug für Anfänger und CLion ist auch für Studenten kostenlos. – Quentin

+0

CLion ist sehr gut - ich habe nicht auf der Liste hinzugefügt, weil ich nicht wusste, dass es für Studenten kostenlos war. Code :: Blocks würde ich nicht empfehlen, da die Entwicklung wie DevC++ stagniert zu sein scheint –

0

1. C++ nicht unterstützt Standard int in main() sollte int als Rückgabewert hinzu:

int main() 
{ 
    ... 
    return 0; 
} 

2. Struktur S1.s ist const char *, bedeutet ihr Wert nicht mehr geändert werden kann, können Sie t t tun ++a[i].s[3].

+0

Danke für die Antwort. Das Entfernen von const kompiliert den Code, stürzt das Programm jedoch ab. – Yosua

0

Im Allgemeinen haben solche Beispiele einen bestimmten Zweck, z. B. ist dieser Code für eine bestimmte Version einer Sprachdefinition gültig.

Dieser könnte zeigen, dass const nicht wirklich const ist. Der Autor kann ANSI C++ annehmen.

Es könnte auch einen Bug in einem bestimmten Compiler demonstrieren.

Ich würde Ihre Compiler-Einstellungen betrachten und sehen, ob Sie die Sprache zu einem früheren Standard ändern können.

Verwandte Themen