1. ホーム

エラー:不完全な型へのポインタのデリファレンス エラー解決

2022-03-02 19:39:27

このエラーは不完全な型を指しており、通常、構造体ポインタ型宣言の定義時に発生します。本当の原因は、構造体が全く定義されていないか、構造体を定義しているヘッダーファイルが正しく参照されていないことにあります。

<スパン この問題を解決するには、2つの方法があります。

<スパン 1. 構造を定義したヘッダーファイルをインクルードする

<スパン 2. 構造体が h ファイルではなく c ファイルで定義されている場合、h ファイルで構造体を定義し、.h ファイルをインクルードするこの方法が推奨されます。

3. エラーを報告したファイルに直接構造体をコピーする ( を使用することは推奨されません。 )

test3.
#include<stdio.h>

int main(int argc, char **argv)
{
    call_num();
}

test2:
#include <stdio.h>

void call_num()
{
    struct zt_t *p = get_num();

    p->x = 356;
    p->y = 325;

    show(p);
}

test1:
#include <stdio.h>

struct zt_t {
    int x;
    int y;
};

struct zt_t num;

struct zt_t * get_num()
{
    num.x = 123;
    num.y = 456;

    return &num;
}


void show(struct zt_t *buf)
{
    printf("%s %d %d %d \n",__func__,__LINE__ ,buf->x, buf->y);
}


コンパイルの結果は次のようになります。

以下のように修正します。

test3.
#include <stdio.h>
#include "test.h"

int main(int argc, char **argv)
{
    call_num();
}


test2:
#include <stdio.h>
#include "test.h"

void call_num()
{
    struct zt_t *p = get_num();

    p->x = 356;
    p->y = 325;

    show(p);
}

test1:
#include <stdio.h>
#include "test.h"


struct zt_t num;

struct zt_t * get_num()
{
    num.x = 123;
    num.y = 456;

    return &num;
}


void show(struct zt_t *buf)
{
    printf("%s %d %d %d \n",__func__,__LINE__ ,buf->x, buf->y);
}


test.h
#ifndef __TEST_H__
#define __TEST_H__

struct zt_t {
    int x;
    int y;
};
struct zt_t * get_num();

#endif


コンパイルの結果は以下のようになります。