【问题标题】:C++ Struct Puzzle Unable to be CompiledC++ 结构拼图无法编译
【发布时间】:2017-04-27 10:36:33
【问题描述】:

我有来自 C++ 书籍的这段代码 sn-p:

#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。

【问题讨论】:

  • 我觉得这本 C++ 书根本就不是 C++……
  • 这看起来更像是 90 年代初的 C,而不是真正的 C++。你应该得到一本更好的 C++ 书。
  • s 是const char*,那么s[3] 是const char,你不能对它执行++。
  • 这真的是一本 C++ 书吗?封面上有两个+号吗?如果是这样,我建议你把这本书埋了(别烧了,没必要助长全球变暖),让自己变得更好。
  • 你能提供任何参考书名、作者、页码等吗?

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


【解决方案1】:

停止使用 Dev C++

  • 这是 2000 年初制作的不合标准的 IDE,任何人、大学和学生都不能使用。简单地说:它比其他任何东西都有更多的错误。 (不幸的是,它是几乎所有巴西大学的首选 IDE,唉。)

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

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

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

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

周围有 很多 不错的免费书籍、编译器和 IDE,因为您使用的是 Windows,所以我会推荐其中一种免费 IDE:

  • Microsoft Visual Studio Express
  • Qt 创建者
  • Eclipse CDT

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

【讨论】:

  • Code::Blocks 对初学者来说已经足够了,CLion 对学生来说也是免费的。
  • CLion 非常好 - 我没有添加到列表中,因为我不知道它对学生免费。 Code::Blocks 我不推荐,因为开发似乎像 DevC++ 一样停滞不前
【解决方案2】:

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

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

2.结构体S1.s是const char *,表示它的值不能改变,所以不能做++a[i].s[3]。

【讨论】:

  • 感谢您的回复。删除 const 将编译代码,但会使程序崩溃。
【解决方案3】:

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

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

这也可能是在展示特定编译器中的错误。

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

【讨论】:

    猜你喜欢
    • 2021-05-19
    • 2011-05-20
    • 1970-01-01
    • 2012-04-11
    • 2019-04-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多