アロー演算子について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あなざぁ

アロー演算子について

#1

投稿記事 by あなざぁ » 17年前

こんばんは。とても初歩的な質問なのですが困っています。
今、アロー演算子を使ってテストプログラムを書こうと思っているのですが、
どうしてもエラーが出てしまいます。


構造体に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:アロー演算子について

#2

投稿記事 by 御津凪 » 17年前

エラーの原因は 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 だと思うのですが。

box

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

#3

投稿記事 by box » 17年前

構造体の定義を main 関数の「中」で行なっているため、
swap_struct 関数では a や b というメンバーのあることがわかりません。

あなざぁ

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

#4

投稿記事 by あなざぁ » 17年前

みなさんのおかげで解決しました。
先に定義する必要があったのですね!
ありがとうございます。^^

あなざぁ

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

#5

投稿記事 by あなざぁ » 17年前

回答し忘れました;
ついでにコンパイラはBorland C++ Compilerです。

たかぎ

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

#6

投稿記事 by たかぎ » 17年前

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る