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を返したいようですが、後struct pointに入れるのを忘れました:pointstruct

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 point addpoints(struct point p1, struct point p2){//...}

また、struct pointはグローバルではなく、メイン関数の内部にあります。したがって、のようなグローバル関数addpointsはそれにアクセスできません。あなたはそれを外に持って行かなければならず、そして関数addpointsの前になければなりません。Cパーサーはup-to-downを使用してコードを解析するためです。使用前に表示されたことのないものがある場合は、次のように表示されます。first declaration of something

于 2012-10-28T21:41:20.363 に答える