unionについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
うしお
記事: 56
登録日時: 14年前

unionについて

#1

投稿記事 by うしお » 14年前

unionについての質問です

たとえば2次元ベクトルのプログラムを作るとして、

コード:

Vector2 V(30.f,20.f);
cout << V.x;
cout << V.y;

cout << V.u;
cout << V.v;
等のように、x,yではもちろん、u,vなど違う名前でもアクセスをしたい、
と思い、こう書いてみました

コード:

union Vector2
{
public:
	struct{
		float x,y;
	};
	struct{
		float u,v;
	};
};
VC2010ではコンパイルできましたが、
codepadでは無理でした。
なのでこの使い方はおそらくコンパイラの独自拡張だろうと思います。
このように別名でアクセスする方法をお伺いしたいです。
よろしくお願いします。

※ V.xy.x やV.uv.uなどはできまが、今回はやりたくないと考えています。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: unionについて

#2

投稿記事 by softya(ソフト屋) » 14年前

codepadは環境の名前なのでコンパイラ名を明確にしていただけますか?
少なくとも、この書き方だとC++でないとコンパイルは通りません。

ちなみに、Borland C++ Compiler 5.5とg++(gcc)ではコンパイルOKでした。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
うしお
記事: 56
登録日時: 14年前

Re: unionについて

#3

投稿記事 by うしお » 14年前

softya(ソフト屋) さん ありがとうございます

失礼しました 確認してみたところ、
C++: g++ 4.1.2
flags: -O -std=c++98 -pedantic-errors -Wfatal-errors -Werror -Wall -Wextra -Wno-missing-field-initializers -Wwrite-strings -Wno-deprecated -Wno-unused -Wno-non-virtual-dtor -Wno-variadic-macros -fmessage-length=0 -ftemplate-depth-128 -fno-merge-constants -fno-nonansi-builtins -fno-gnu-keywords -fno-elide-constructors -fstrict-aliasing -fstack-protector-all -Winvalid-pch
となっていました gcc-g++-4.1.2のようです

Borland C++ Compilerのテスト、感謝いたします。
このunionの使い方はあまり推奨されないでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: unionについて

#4

投稿記事 by softya(ソフト屋) » 14年前

更に調べてみました。

-pedantic-errors でエラーが出るので無名構造体でエラーが出ています。
あぁ、無名構造体がC++で非推奨なので、-pedantic-errorsとするとエラーになるってことみたいですね。
今後使って良いのかも疑問です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
うしお
記事: 56
登録日時: 14年前

Re: unionについて

#5

投稿記事 by うしお » 14年前

なるほど、この方法はやめようと思います。
付き合っていただきありがとうございました。解決といたします。

閉鎖

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