ページ 11

アロー演算子について

Posted: 2008年9月13日(土) 22:15
by あなざぁ
こんばんは。とても初歩的な質問なのですが困っています。
今、アロー演算子を使ってテストプログラムを書こうと思っているのですが、
どうしてもエラーが出てしまいます。


構造体にint型の二つのメンバを用意し、関数にポインタを渡すことによって両者の値を入れ替えようと思っています。

#include <stdio.h>

void swap_struct(struct Data *);

int main(void)
{
	struct Data{
		int a,b;
	};
	
	struct Data MyData;
	
	MyData.a = 5;
	MyData.b = 10;
	
	printf("before  a=%d b=%d",MyData.a,MyData.b);
	
	swap_struct(&MyData);
	
	printf("after   a=%d b=%d",MyData.a,MyData.b);
	return 0;
}

void swap_struct(struct Data *lpData)
{
	int c;
	
	c = lpData->a;
	lpData->a = lpData->b;
	lpData->b = c;
	
	return;
}
エラーは、自作関数内でa,bが未定義であるといったものです。
本を読み直してやってみたのですが、やはりエラーが出てしまいます。

Re:アロー演算子について

Posted: 2008年9月13日(土) 22:34
by 御津凪
エラーの原因は main 関数内で Data 構造体を定義していることにあります。
(関数の中に書くことはエラーでなく、きちんと定義できますが)

Data 構造体を関数の外に置くとコンパイルが通るはずです。

ただし、必ず使用される前の場所に置くこと。
この場合、宣言されている部分に Data 構造体が使われているので、
void swap_struct(struct Data *);
struct Data{
	int a,b;
};
こう置くとやはりエラーが出ます。
struct Data{
	int a,b;
};
void swap_struct(struct Data *);
このように置いてください。

ちなみに、使用しているコンパイラは C++ ですか?それとも C ですか?

書き方を見ると、たぶん C だと思うのですが。

Re:アロー演算子について

Posted: 2008年9月13日(土) 22:34
by box
構造体の定義を main 関数の「中」で行なっているため、
swap_struct 関数では a や b というメンバーのあることがわかりません。

Re:アロー演算子について

Posted: 2008年9月13日(土) 23:02
by あなざぁ
みなさんのおかげで解決しました。
先に定義する必要があったのですね!
ありがとうございます。^^

Re:アロー演算子について

Posted: 2008年9月13日(土) 23:03
by あなざぁ
回答し忘れました;
ついでにコンパイラはBorland C++ Compilerです。

Re:アロー演算子について

Posted: 2008年9月13日(土) 23:53
by たかぎ
> ただし、必ず使用される前の場所に置くこと。
> この場合、宣言されている部分に Data 構造体が使われているので、
> void swap_struct(struct Data *);
> 
> struct Data{
> 	int a,b;
> };
> こう置くとやはりエラーが出ます。

そんなことはありません。
実際に試してみてください。