ページ 11

unionについて

Posted: 2011年2月13日(日) 19:31
by うしお
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などはできまが、今回はやりたくないと考えています。

Re: unionについて

Posted: 2011年2月13日(日) 22:06
by softya(ソフト屋)
codepadは環境の名前なのでコンパイラ名を明確にしていただけますか?
少なくとも、この書き方だとC++でないとコンパイルは通りません。

ちなみに、Borland C++ Compiler 5.5とg++(gcc)ではコンパイルOKでした。

Re: unionについて

Posted: 2011年2月13日(日) 22:26
by うしお
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の使い方はあまり推奨されないでしょうか?

Re: unionについて

Posted: 2011年2月13日(日) 23:11
by softya(ソフト屋)
更に調べてみました。

-pedantic-errors でエラーが出るので無名構造体でエラーが出ています。
あぁ、無名構造体がC++で非推奨なので、-pedantic-errorsとするとエラーになるってことみたいですね。
今後使って良いのかも疑問です。

Re: unionについて

Posted: 2011年2月13日(日) 23:31
by うしお
なるほど、この方法はやめようと思います。
付き合っていただきありがとうございました。解決といたします。