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.s
是const 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++。
它也可能展示了特定编译器中的错误。
我会查看您的编译器设置,看看您是否可以将语言更改为更早的标准。
我有一本 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.s
是const 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++。
它也可能展示了特定编译器中的错误。
我会查看您的编译器设置,看看您是否可以将语言更改为更早的标准。