C++ 结构拼图无法编译

C++ Struct Puzzle Unable to be Compiled

我有一本 C++ 书中的代码片段:

#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]);
    }
}

使用Dev C++ v5.11,无法编译,错误代码:

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

@Corristo 评论的解决方案有效。

感谢大家的帮助。下次我会变得更好 IDE 和书籍。谢谢,@Tomaz-Canabrava。

1. C++ 不支持 main() 中的默认 int,应添加 int 作为 return 值:

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

2.结构体S1.sconst char *,意思是它的值不能改变,所以你不能做++a[i].s[3].

停止使用 Dev C++

  • 这是 2000 年初制定的不合格 IDE,从不 任何人 都不应使用,大学也不应使用,也不是学生。简而言之:它的错误比其他任何东西都多。 (不幸的是,它是几乎所有巴西大学的选择,叹息。)

获得一本合适的 C++ 书籍

  • 如果它说它会教你任何低于 C++11 的东西,那它不是一本合适的 C++ 书,它通常会教你错误 中世纪的 c++(C++11 之前)

不要使用与 Turbo C++ 相关的任何内容

  • 说真的,有些大学仍在使用它来教授 C++。

很多 好书和免费书籍、编译器和 IDE,因为你在 windows 我会推荐其中之一那些免费 IDEs:

  • 微软Visual Studio快递
  • Qt Creator
  • 日食CDT

这至少会给你一个现代的 C++,而不是石器时代的。 好好学习。

一般来说,这样的示例都有特定的用途,例如,此代码对特定版本的语言定义有效。

这可能是在证明 const 并不是真正的 const。作者可能假设 ANSI C++。

它也可能展示了特定编译器中的错误。

我会查看您的编译器设置,看看您是否可以将语言更改为更早的标准。