为什么我的代码会给出编译时错误?

时间:2013-11-22 12:10:31

标签: c compiler-errors

我正在尝试解决这个问题,但无法理解为什么会出现编译时错误 我的代码是:

#include<stdio.h>
static struct student
{
    int a;
    int b;
    int c;
    int d;
}s1={6,7,8,9},s2={4,3,2,1},s3;
void main()
{
    s3=s1+s2;
    clrscr();
    printf("%d %d %d %d",s3.a,s3.b,s3.c,s3.d);
    getch();
}

6 个答案:

答案 0 :(得分:5)

您无法执行此操作s3=s1+s2; - 仅当+运算符为您的结构重载时才能执行此操作。 C中不支持运算符重载。这就是您所需要的:

s3.a=s1.a+s2.a;
s3.b=s1.b+s2.b;
....

How structs work.

答案 1 :(得分:5)

您必须手动添加每个成员。

s3.a = s1.a + s2.a;

等等......

答案 2 :(得分:2)

你不能添加像这样的结构

s3=s1+s2;  

Operations on Structures

  

C直接支持结构的操作数量相对较少。正如我们所见,我们可以定义结构,声明结构类型的变量,并选择结构的成员。我们还可以分配整个结构:表达式

c1 = c2
     

会将所有c2分配给c1(假设前面的声明,包括实部和虚部)。我们还可以将结构作为参数传递给函数,并声明和定义返回结构的函数。 但要做其他事情,我们通常必须编写自己的代码(通常作为函数)。例如,我们可以编写一个函数来添加两个复数:

struct complex
cpx_add(struct complex c1, struct complex c2)
{
    struct complex sum;
    sum.real = c1.real + c2.real;
    sum.imag = c1.imag + c2.imag;
    return sum;
}  

答案 3 :(得分:1)

定义加法运算符或使用s3.a = s1.a + s2.a; s3.b = s1.b + s2.b; etc

答案 4 :(得分:1)

问题:无法将structures添加为s3=s1+s2; 如果要添加结构1 s1和结构2 s2

中的值

试试这个:

s3.a=s1.a+s2.a;
s3.b=s1.b+s2.b;
s3.c=s1.c+s2.c;
s3.d=s1.c+s2.c;

答案 5 :(得分:1)

您无法在此处向其他人添加结构:s3=s1+s2; 如果您需要此功能,我建议您创建一个功能,例如

struct student add_up_students(struct student *s1, struct student *s2) {
    struct student s = {0};
    s.a= s1->a + s2->a;
    s.b= s1->b + s2->b;
    s.c= s1->c + s2->c;
    s.d= s1->d + s2->d;
    return s;
}

并使用它:

s3 = add_up_students(&s1, &s2);

打印出您所期望的内容。