C ++ Struct Puzzle无法编译

时间:2017-04-27 10:36:34

标签: c++ struct dev-c++

我有一本来自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。

3 个答案:

答案 0 :(得分:6)

停止使用Dev C ++

  • 这是一个在2000年初制作的不合标准的IDE,任何任何人,大​​学和学生都不应该使用 。简单地说:它比其他任何东西都有更多的错误。 (不幸的是,它是几乎所有巴西大学选择的IDE,感叹。)

获取正确的C ++书籍

  • 如果它说它会教你 11以下的任何东西,它不是一本正确的C ++书,它会教你错误 c ++从中世纪时代(前C ++ 11)

请勿使用与Turbo C ++相关的任何内容

  • 说真的,那里的大学还在用它来教C ++。

有很多好的和免费的书籍,编译器和IDE,因为你在Windows中我会推荐其中一个免费的IDE:

  • Microsoft Visual Studio Express
  • Qt Creator
  • Eclipse CDT

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

答案 1 :(得分:0)

1。 C ++不支持int中的默认main(),应将int添加为返回值:

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

2。结构S1.sconst char *,表示无法更改其值,因此您无法执行++a[i].s[3]

答案 2 :(得分:0)

通常,这样的示例具有特定目的,例如,此代码对于特定版本的语言定义有效。

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

它也可能会破坏特定编译器中的错误。

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