[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 01/02 08:18 / Filesize : 209 KB / Number-of Response : 862
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part62



1 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 23:53:59 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part61
pc11.2ch.net/test/read.cgi/tech/1205059063/

684 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 00:37:54 ]
>>683
ありがとうございます

685 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 07:03:55 ]
一度配列か何かを確保しておいて、そこにforで引数付きコンストラクタをnewして回せば解決する。
デストラクタに注意

686 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 12:38:32 ]
まずメモリに連続した領域内に生成したいものが、ほんとうに
クラスのインスタンスじゃないとダメなのか再考してみたら?

687 名前:デフォルトの名無しさん [2008/07/09(水) 12:41:11 ]
引き数つきのnewか…これはわりと難しいので、
あとで初期化用メソッドを呼ぶかポインタの配列にしたほうがらくちん。


688 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 19:09:17 ]
VC6以前のVS持っている人はいませんか?
DDE spyを分けて欲しいのですが・・・

689 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 19:18:31 ]
2.0のなら転がってるPCのHDDあされば出てくるかもだが・・・

690 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 19:56:05 ]
>>688
それってダメなんじゃないの?

691 名前:デフォルトの名無しさん mailto:sage [2008/07/09(水) 20:48:29 ]
>>682
vectorじゃだめなのかい?

692 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 06:15:03 ]
最新のVC++コンパイラって、C99に対する完全な上位互換を持っていると
思っていいの?



693 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 07:29:57 ]
C99はまだスルーされてる

694 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 11:04:51 ]
まだどころか多分永遠にスルーされる
今の所C99に準拠しているのはIntel C++程度

695 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 11:05:45 ]
C99なんて有ったの… とか

696 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 12:30:01 ]
対応させるメリットないしな

697 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 14:39:59 ]
一行コメントと関数途中やfor初期化部での変数宣言に対応してくれればあとはいいや

698 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 15:25:18 ]
たしかVC++チームのブログのコメント欄だかで、C99対応してくれってユーザの声はほとんど無いって言っていたような。
C99のいくつかの有用な機能、一行コメントだとか、restrictだとかは取り入れたが、C99全部入れても、誰も使わないしなぁ。
Variable-length arrayなんて、いまどき誰が使うんだ。

699 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 15:51:39 ]
C++があるからねえ・・・

700 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 16:16:02 ]
gccでは可変長配列に対応してたりするけどな

701 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 17:36:42 ]
C99欲しい人は何が目当てなの?

702 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 17:39:47 ]
>>698
歴史的経緯でalloca()が実装されてないから、可変長配列はあれば便利だぞ。



703 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 18:04:05 ]
>歴史的経緯でalloca()が実装されてない
どこのはなし?

704 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 18:53:10 ]
stdint.hが欲しいんだ。


705 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 19:07:41 ]
よろしい

706 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 19:49:43 ]
そもそもallocaはC89、C99の規格の中には存在しない。
ありゃPOSIX規格のモンだ。
このスレ的にはWin32 APIと同等に扱われるべき環境依存の関数。

なんだけど、itoaとかと同じで、事実上無視できない存在ではあるね。
とはいえ、90年代ならまだしも、
今日び、スタックからわずかなメモリを確保できたところで、それほど利点も無いだろ。
現代なら定数時間でメモリを確保解放できるメモリプールで良いじゃん。

707 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 20:24:39 ]
C99を策定していた委員会の連中もC++98がこれだけ
広く使われるようになるとは夢にも思ってなかったろう。

でないとあれだけ緻密なC99の規格、しかもC89と互換性を
犠牲にしてわざわざ新しい規格を作るはずがない。

708 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 20:42:07 ]
>>706
>702は、POSIXにはあるallocaがWin32にはないから、代わりに使いたいと言ってるんじゃないかと。
確かに、freeする必要がないメモリを好きに取れるのは楽かもしれんね。
それこそ、今時スタックサイズをけちることもないんだし。

709 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 20:50:59 ]
ケチる必要は無いかもしれんが多用するのはバカのやることだぞ。
例えば、VCのリンカのデフォルトのスタックサイズは1MBだ。
何GBもメモリがある時代にたったの1MBだぞ。
*unixのことはよく知らんが、そう変わらんだろうよ。
現状の32bitコードで、スタックサイズが大きすぎると、
スレッドを数十個作っただけで、無駄にアドレス空間が浪費される。
だからスタックのサイズは小さいんだよ。

710 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 21:06:44 ]
>>708
_alloca()ならVC++でも普通に使えるよ

711 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 21:50:21 ]
こんなこともallocaと
って一度言ってみたいです

712 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 22:03:10 ]

         |:;:;:;:;:;:;:;:;:;:;:;:;:;:i;:;:;:;:;:;:;:;:;:;:;:;:;|
           |;:;:_:;:_:;:_:;:_;:;_:;:l:;_;:_:;:_:;:_:;:_;:_;|
        |______|_____|
        | 三|  _     _   |三 !
        | 三|  三シ   ヾ三  |三 |
        | 三′  .._     _,,..  i三 |
        ト、ニ| <でiンヽ  ;'i"ィでiン |三.|
        ', iヽ!  、 ‐' /  !、 ーシ |シ,イ
         i,ヽリ    ,' :  !.     |f ノ
         ヾ!    i ,、 ,..、ヽ   lノ
          |      _ _    イ l       malloca
            l    ,ィチ‐-‐ヽ  i /、
             ゙i、   ゝ、二フ′ ノ/'"\
              | \  ー一 / /   _,ン'゙\
          ,ィ|、  \     /_,、-'" _,.-''´ `丶、__
       _, イ  | ヽ_ 二=''" _,. -''´  """""´´  ``ー





713 名前:デフォルトの名無しさん [2008/07/10(木) 22:19:03 ]
alloca は gcc の configure でもチェックあるよな

714 名前:デフォルトの名無しさん [2008/07/10(木) 22:20:10 ]
> バカのやることだぞ

まだそんなカキコしてるんですか? にっぽんのドクターさん

715 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 23:11:49 ]
プログラム=PCアプリだと思ってる連中は気楽でいいのう・・

716 名前:デフォルトの名無しさん mailto:sage [2008/07/10(木) 23:15:46 ]
どう気楽なのかキッチリ説明してもらおう。  (と言ってみる

717 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:06:24 ]
C99は無かったことにならないかな。下手にこんなのがあると、コンパイラ
ベンダーが、C99実装しかねない。

718 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:13:54 ]
たいていのコンパイラベンダはC++を優先するだろ

sizeofがコンパイル時定数にならないとか悪夢過ぎるだろ

719 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:51:13 ]
・conio.hを何とかして欲しい。
・stdint.hの声が何故大きくない?

720 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 00:58:56 ]
それにしてもC++自体が変態化してきて誰にも使われなくなりそうな気がするのは俺だけだろうか

721 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:06:43 ]
おれのVC++のソース、alloca普通に便利に使ってる

722 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:26:23 ]
C++はいろいろ変な部分があるが、
代わりになるいい言語がないのも事実
web限定とかだとPerl系に軍配が上がるが



723 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:40:53 ]
C++0xはC99みたいな立場になるだろうな
そして代わりに○○が台頭する

○○にはお好きな言語をどうぞ

724 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 01:55:57 ]
Obj-C

725 名前:デフォルトの名無しさん [2008/07/11(金) 01:58:45 ]
アプリケーション(ダイアログ)に表示された文字を外のアプリケーションから取得する方法ご存知のかたいませんか?


726 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 02:01:16 ]
D言語がいつか主流になる・・・
そんな風に考えていた時期がありました・・・

727 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 02:20:56 ]
>>725
君がすれ違いだということだけは、はっきりわかる。
プラットフォームすら記載されてないので、どのすれが適当かはしらん。

728 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 03:03:54 ]
>>726
今ひとつ流行らんよなアレ

729 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 04:15:06 ]
>>728
だってDは、「言語仕様が確定=開発終了」だもん。
D1の仕様は決まったけど、D2のほうが進歩してるのに誰がつかうよ。

730 名前:デフォルトの名無しさん mailto:sage [2008/07/11(金) 12:54:57 ]
仕様と同時に実装が下りてくるってのもエキサイティングだとは思うがね
なんにせよ俺は指をくわえて見てるだけ

731 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 02:55:05 ]
無名namespaceについて教えてください。

名前のある名前空間の場合、
namespace hoge{
void f();
}
というように宣言して、後で
void hoge::f(){}
のように定義できますが、名前無しの場合
namespace{
void f();
}
として後で定義を書く場合、??::f()というような形式では定義できないのでしょうか?
もちろん定義のときも
namespace{
}で囲ってやればいいのでしょうが、関数定義のような長いものをブラケットで
囲むというのも、邪魔くさいなぁと思い。


732 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 03:05:35 ]
確かに邪魔くさいが、
だからこそそんなもの使わないですむようしておけって話じゃね?



733 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 03:08:33 ]
>>731
>として後で定義を書く場合、??::f()というような形式では定義できないのでしょうか?
こういう参照が出来ないからこそ役に立つんだと思う

734 名前:731 mailto:sage [2008/07/12(土) 03:15:56 ]
レスどうもです。

基本的に、C++では翻訳単位内でのみ使用する変数や関数は、C言語のような
staticを付けるのではなく、無名名前空間を推奨しているようですが、
そうなると関数の定義は
namespace{
void f() { }
}
のようにするということでしょうか。みんなそうしてるのかな。

735 名前:732 mailto:sage [2008/07/12(土) 03:27:22 ]
ごめん。 もっとくだらない理由だと思ってた。

"翻訳単位内でしか使わない"っていうことを明示したいなら、
その邪魔くさいnamespaseが(目立つから)役に立つだろうし、
邪魔くさいnamespaseを使いたくないってことは、
"翻訳単位内でしか使わない"っていうことを明示しなくてかまわない
と、俺は思うけど。

本当に邪魔だと思うなら、翻訳単位内でしか使わないとか、あきらめなよ。

736 名前:731 mailto:sage [2008/07/12(土) 03:51:39 ]
外部リンケージを持たせたくない変数や関数の宣言だけを
namespace{}に収めるところまでは、目立たせる意味でも
一覧という意味でも非常にスッキリしてると思うんですよね。
ただ、ここに関数のボディまで書いてしまうと、一望しづらくなるので
別途書くことになるのですが、関数定義をブラケットで囲むということに
少し拒否反応がでてしまった次第です。ただ、これしか方法がないなら
そうするしかないですね。邪魔だから使わないというわけにもいかない
機能ですし。あとは、関数定義1つ1つをnamespace{]で囲むのか、複数の
関数定義をまとめてnamespace[]で囲むのか、こだわれるところとしたら
そのくらいですか。



737 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 04:02:32 ]
すごい余談だけど、目立たせなくてはいけないのは、関数本体だと思うんだ。
関数本体をメンテナンスするとき、どの関数に使用されているかが問題になるので。

宣言が目立たないと、間違って呼び出そうとしてリンクエラーでるじゃん? それもいやじゃん?
ていわれりゃそうなんだけどさ。

738 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:09:05 ]
templateで、doubleとfloatだけしか使えないようにするには、
何か書き方があるのでしょうか。教えてください。
template<typename T> void hoge(T arg);

739 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:30:51 ]
template<typename T> void hoge(T arg){return;}
void hoge(double arg);
void hoge(float arg);

740 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:33:12 ]
>>738
template<typename T> struct hoge_chk{hoge_chk(){ use_float_or_double(); }};
template<> struct hoge_chk<float>{};
template<> struct hoge_chk<double>{};

template<typename T> void hoge(T arg){
   hoge_chk<T>();
   ...
}

741 名前:740 mailto:sage [2008/07/12(土) 08:35:10 ]
use_float_or_double()は定義されていない前提ね。
コンパイルエラーにさせるため。

742 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:39:49 ]
template<typename T> void hoge(T arg);
template<> void hoge(float arg) { }
template<> void hoge(double arg) { }

でいいじゃん。



743 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:44:11 ]
>>739 >>742
それだと
void hoge(float arg) {}
void hoge(double arg) {}
と同じだし、それぞれ実装書かないといけないから
テンプレート関数にする意味無いだろw

744 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:45:47 ]
template<typename T> void hoge_impl(T arg) {}

template<typename T> void hoge(T arg);
template<> void hoge(float arg) { hoge_impl(arg); }
template<> void hoge(double arg) { hoge_impl(arg); }

745 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:52:53 ]
>>743
同じじゃねーよ。そのコードでhoge("hogehoge")はエラーだけど>>739>>742はエラーじゃない。
テンプレートにする意味がないっていうのは質問者に言えって。

746 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:55:57 ]
>>745
いや、hoge("hogehoge")で>>742はエラーになるよ。

747 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:56:00 ]
>>744
だから下のテンプレート関数は意味無いってw
それでやるならこうだろ
template<typename T> void hoge_impl(T arg) {}
inline void hoge(float arg) { hoge_impl(arg); }
inline void hoge(double arg) { hoge_impl(arg); }

748 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 08:59:00 ]
質問者がdoubleとfloatだけしか使えないように、と言ってるので
使えてしまう>>739も駄目だな

749 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:04:54 ]
>>745
>テンプレートにする意味がないっていうのは質問者に言えって。
>>740>>747はテンプレートにする意味あると思うけど。

750 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:16:21 ]
>>747
テンプレートの特殊化は関数の多重定義に優先するから
意味が違う

751 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:21:25 ]
>>750
意味分かって言ってる?
それで困る「まともな状況」書いてみ

752 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:22:41 ]
テンプレートの特殊化と関数の多重定義を二つかくと
関数の多重定義の方が無視されるだろ



753 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:25:48 ]
>>752
>テンプレートの特殊化と関数の多重定義を二つかくと
それがまともな状況じゃないって言ってるんだよw

754 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:26:34 ]
>>753
メンテナンスの程度次第ではいくらでもあり得る。
まともかまともな状況じゃないかはお前が判断する事じゃない。

755 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:27:36 ]
>テンプレートの特殊化と関数の多重定義を二つかくと
>関数の多重定義の方が無視されるだろ

これ逆だよ。関数の多重定義の方が優先される。
だからテンプレートの特殊化と関数の多重定義は混ぜて
書くべきじゃない。

756 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 09:31:38 ]
>>754
ワロタwどんな糞メンテナンスだよw

757 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 12:06:44 ]
あれ?オーバーロードの方が特殊化より優先するよな?

758 名前:デフォルトの名無しさん mailto:sage [2008/07/12(土) 12:52:15 ]
>>757
>>755

759 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 12:38:07 ]
boostスレ過疎ってんな・・・w

760 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 13:14:51 ]
このスレ過疎ってるのでしょうか?
この話題↓で盛り上げてください!

やねう企画代表者やねうらお(本名・磯崎元洋)が
・ソフトウェアの不正コピーを行っていた
・労働契約上の違反をしていた
・他は不正コピーしていないことを証明しようとしてエロゲーのパッケージを発見し、
 写真に撮ってアップロードしようとした。
d.hatena.ne.jp/pmoky/19000106
やねう企画の裏側(競馬の詐欺ソフトの製作現場)
d.hatena.ne.jp/pmoky/20060510
d.hatena.ne.jp/pmoky/20060511
d.hatena.ne.jp/pmoky/20060512
有限会社やねう企画(所在地・大阪府八尾市末広町2−1−2)が計画倒産
www.sia.go.jp/~osaka/zenso/19.09.pdf

やねうらおプロフィール
性格:友達から「チンピラ」「ヤクザ」と呼ばれている。前世で殺人鬼だった宿業を背負っているという妄想(自覚)あり。
最終学歴:専門学校卒
主な職歴:有限会社センキ(凌辱系アダルトゲームの製作会社)を経て独立、有限会社やねう企画を設立、2006年に計画倒産
代表作:『夜這いマニア』『盗撮マニア』『お楽しみCDシリーズ』『競馬詐欺ソフト』『BM98』

やねうらお語録
>「ワシのほうが潔癖やと思うんやけどな。
>絶対に違法コピーのソフトしか使わんし。
>たとえば強盗に入ったときに、ちょっとかわいそうになって
>十万円だけ残してったら、おかしいやろ?
>自分の『強盗する』という意思に対して矛盾やろ?
>だからワシは、一個も買ったソフトを使ったことがない!!」


761 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 13:18:26 ]
759 :デフォルトの名無しさん [sage] :2008/07/13(日) 12:38:07
  boostスレ過疎ってんな・・・w

760 :デフォルトの名無しさん [sage] :2008/07/13(日) 13:14:51
  このスレ過疎ってるのでしょうか?


日本語が不自由のようだなw

762 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 14:27:07 ]
キーワードによる自動コピペ



763 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 14:49:07 ]
memset や memcpy の動作について質問です。

memset(buff, 0, 0); や memcpy(buff, work, 0);

764 名前:763 mailto:sage [2008/07/13(日) 14:50:35 ]
すみません、途中で送信してしまいました。


memset(buff, 0, 0); や memcpy(buff, work, 0); のように
サイズが 0 の場合、何も行われないという認識で合っていますか?
MSDN では分らなかったです。

765 名前:デフォルトの名無しさん [2008/07/13(日) 15:06:56 ]
サイズ 0 ならガッされないなんて知ってても役に立たんだろ

766 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 15:09:41 ]
>>764
そういう場合、不安だったらmy_memsetかなんか一個かましておけ

767 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 15:12:29 ]
>>765
関数の呼び出し元にバッファ領域のポインタと領域サイズを渡させる場合に役に立ちます
memset や memcpy にサイズ 0 を渡しても大丈夫ということであれば、
領域サイズに 0 が指定された場合のエラーチェックをせずに済むケースがあるからです

768 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 15:25:06 ]
規格書にはn文字ほげほげするとだけしか書かれてなかった希ガス。
詳しく知りたければJISのサイトでX3010を検索。

769 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 15:25:19 ]
>Where an argument declared as size_t n specifies the length of the array for a
>function, n can have the value zero on a call to that function. Unless explicitly stated
>otherwise in the description of a particular function in this subclause, pointer arguments
>on such a call shall still have valid values, as described in 7.1.4. On such a call, a
>function that locates a character finds no occurrence, a function that compares two
>character sequences returns zero, and a function that copies characters copies zero
>characters.

0を渡すことはできるが、その場合でもNULLはダメらしい

770 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 15:44:01 ]
>>766
なるほど、それは確かに賢いやり方ですね。
ちょっと考えてみます。

>>768
調べてみます。

>>769
NULL チェックだけは避けられないということですね。
やはり、エラーをチェックする自作関数をかました方が良いのかもしれないですね。

771 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 18:18:24 ]
宣言と定義が別々になってるコンストラクタで、初期化リスト使う場合って
宣言と定義両方に初期化リストつけなきゃいけないんだっけ?

772 名前:デフォルトの名無しさん mailto:sage [2008/07/13(日) 18:20:42 ]
定義の方だけ
class A {
int a;
A();
};
A::A():a(0){}



773 名前:771 mailto:sage [2008/07/13(日) 18:25:33 ]
ありがとう。

774 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 05:20:26 ]
=== hoge.h ===
class hoge {
public:
 template<typename T> T func(T a) const;
};
=== hoge.cxx ===
#include "hoge.h"
template<typename T>
T hoge::func(T a) const {
 return a;
}
=== main.cxx ===
#include "hoge.h"
int main() {
 hoge h;
 int a;
 h.func(a);
 return 0;
}

775 名前:774 mailto:sage [2008/07/14(月) 05:22:22 ]
GCC 4.0.1で、
$ g++ -c hoge.cxx -o hoge.o
$ g++ -c main.cxx -o main.o
$ g++ main.o hoge.o -o main
Undefined symbols:
"int hoge::func<int>(int) const", referenced from:
_main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

となってしまいます。
templateのメンバ関数というのは、これではまずいですか?


776 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 05:41:04 ]
まずいです。
h.func(a); を書いたソースから hoge::func の実装が見えるようにして下さい。
ようするに hoge.h に実装を書いてください。

777 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 05:50:17 ]
>>775
exportキーワードをサポートしてないC++処理系では無理

778 名前:774 mailto:sage [2008/07/14(月) 06:14:12 ]
>>776-777
まじですか。なんともめんどくさい。
設計からやり直さないと。
ありがとうございました。

779 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 20:11:37 ]
VC++ 2008はもうexportをサポートしてる?

780 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 20:14:37 ]
ネイティブコードなんてシロモノはOSぐらいしか使わないような世界になったなら、
exportもサポートされるかもな。

781 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 20:19:25 ]
じゃあ2008でも未サポート?

782 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 20:57:28 ]
>>780
なんで?



783 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 23:23:50 ]
今やオブジェクト間最適化が当然の如く行なわれている。
export実装がそんなに困難であるはずがない。

784 名前:デフォルトの名無しさん mailto:sage [2008/07/14(月) 23:29:47 ]
コードレベルで保持しないとダメだから難しいでしょ。

D言語はうまいことやってるけど。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<209KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef