[英]Dereferencing pointer to incomplete type using a struct
我在標題“ point.h”中具有以下代碼:
#ifndef POINT_H_INCLUDED
#define POINT_H_INCLUDED
struct Point* createDefaultValues();
#endif // POINT_H_INCLUDED
point.c文件具有以下代碼:
#include <stdlib.h>
struct Point {
int x;
int y;
};
struct Point* createDefaultValues()
{
struct Point* point;
point = (struct Point*) malloc(sizeof(struct Point));
point->x = 2;
point->y = 1;
return point;
};
main.c由以下幾行組成:
#include <stdio.h>
#include <stdlib.h>
#include "point.h"
int main()
{
struct Point* cerc;
cerc = createDefaultValues();
printf("%d, %d", cerc->x, cerc->y);
return 0;
}
我在printf()行中將指針指向不完整的類型錯誤。 我應該怎么修理?
我知道我可以在struct中分配默認值,但是我不想這樣做,我只想使用在標頭中找到的函數來分配它們。
您可以將結構定義移到頭文件中:
#ifndef POINT_H_INCLUDED
#define POINT_H_INCLUDED
struct Point {
int x;
int y;
};
struct Point* createDefaultValues();
#endif // POINT_H_INCLUDED
並在point.c中包含頭文件
另一種方法是編寫兩個訪問器函數,因此您可以通過它們獲取成員的值,而不是延遲指針。 這種方法可能更好,因為它不會強迫您將結構定義放到公眾視野中。
為此,您可以添加intto point.h
:
int getX(struct Point* point);
int getY(struct Point* point);
定義進入point.c
:
int getX(struct Point* point)
{
return point->x;
}
int getY(struct Point* point)
{
return point->y;
}
並在main.c中將其替換為:
printf("%d, %d", getX(cerc), getY(cerc));
通過擴展它,您可以編寫帶有驗證等功能的setter函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.