[1710] Re:構造体へのポインタを返す関数
投稿者:512
2011/03/20 17:26:03
お返事遅れました。
(ぱ)さん、yuyaさん、ありがとうございます。
(ぱ)さんの回答にひもづけて続けます。
下記がサンプルコードとエラーメッセージです。
(環境はMac OSXのXcode3.2.4です。)
main.c
--------------------------------------------------
#include "File1.h"
#include "File2.h"
int main (int argc, const char * argv[]) {
file1();
file2();
return 0;
}
--------------------------------------------------
File1.h
--------------------------------------------------
typedef struct KOUZOU1_tag {
int var;
} KOUZOU1;
void file1();
static KOUZOU1 *func();
--------------------------------------------------
File1.c
--------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include "File1.h"
void file1() {
KOUZOU1 *kouzou;
kouzou = func();
printf("%d\n", kouzou->var);
}
static KOUZOU1 *func() {
KOUZOU1 *kouzou;
kouzou = malloc(sizeof(KOUZOU1));
kouzou->var = 1;
return kouzou;
}
--------------------------------------------------
File2.h
--------------------------------------------------
typedef struct KOUZOU2_tag {
int var;
} KOUZOU2;
void file2();
static KOUZOU2 *func(); /* ここがエラーになります:error: conflicting types for 'func' */
--------------------------------------------------
File2.c
--------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include "File2.h"
void file2() {
KOUZOU2 *kouzou;
kouzou = func();
printf("%d\n", kouzou->var);
}
static KOUZOU2 *func() {
KOUZOU2 *kouzou;
kouzou = malloc(sizeof(KOUZOU2));
kouzou->var = 2;
return kouzou;
}
--------------------------------------------------
エラーは
error: conflicting types for 'func'
というもので
File2.h の static KOUZOU2 *func();
の所に出ます。
ちなみに
error: previous declaration of 'func' was here
というメッセージも同時に出て、開くと
File1.h の static KOUZOU1 *func();
を指していました。
やっぱりstaticを付けているのに
「funcさっき宣言したじゃん!」と言われているようなんですが、
いかがでしょうか。
うーん、どこを勘違いしてるんだろうか。。。
よろしくお願いします!
P.S.
「記憶クラス指定子」「型修飾子」の違いなど、
自分で間違えて指摘されるとスムーズに理解しやすいですね。
本で読むときはつい飛ばしてしまいがちですが(笑