0

我收到此错误:

str.c:5:19: error: expected identifier or '(' before 'struct'

编译以下代码时。它有什么问题?

#include <stdio.h>

struct addpoints (struct point p1, struct point p2){
    p1.x += p2.x;
    p1.y += p2.y;
    return p1;
}

int main(){
    struct point{
        int x;
        int y;
    };

    struct point p1 = { 13, 22 };
    struct point p2 = { 10, 10 };

    addpoints (p1,p2);

    printf("%d\n", p1.x);

}
4

3 回答 3

2

看起来您想addpoints返回 a struct point,但忘记在pointafter中输入struct

struct point addpoints (struct point p1, // ...

struct point但是,除非您将定义从以下内容中提取出来,否则这仍然不起作用main

#include <stdio.h>

struct point{
    int x;
    int y;
};

struct point addpoints (struct point p1, struct point p2){
    p1.x += p2.x;
    // ...
于 2012-10-28T21:29:01.867 回答
1
struct addpoints (struct point p1, struct point p2){

struct不是类型。struct point是一种类型。

struct point在使用它之前还要声明你的类型,在这里你是struct pointmain函数中声明。

于 2012-10-28T21:26:22.880 回答
0

很多问题:

struct addpoints (struct point p1, struct point p2){
    p1.x += p2.x;
    p1.y += p2.y;
    return p1;
}

乍一看,我很惊讶,我不记得 C 有这种语法吗?我一定又傻了。然后我看,它是一个函数,返回类型是struct,这显然是错误的。

struct 是声明结构的关键字,而不是类型。如果要返回结构类型,则需要结构名称。在您的情况下,您应该使用:

struct point addpoints(struct point p1, struct point p2){//...}

你也在你struct point的主要功能中,而不是全局的。所以像这样的全局函数addpoints无法访问它。你必须把它带到外面,并且必须在函数添加点之前。因为 C 解析器使用 up-to-down 来解析代码。如果你有一些在使用前从未出现过的东西,它会告诉你,first declaration of something

于 2012-10-28T21:41:20.363 回答