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


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

【初心者歓迎】C/C++室 Ver.64【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:25:51 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.63【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1231499251/

【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。


541 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:42:20 ]
ハノイの塔を解くプログラムを書いたのですが、結果が正しいのかわかりません。
どなたか検証していただけないでしょうか?

↓ソース
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8999.c

ちなみに、円盤の個数が5までなら正しいのを確認してます。


542 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:14:36 ]
5個まで正しいなら、6個目も正しいのは簡単にわかるよ。
なぜなら、6個目の解法は

5個目までの解法+一番下を動かす+5個目までの解法(ただし最初とは使う柱が違う)

だから。
ちなみに7個目の解法は

6個目までの解法+一番下を動かす+6個目までの解法(ただし最初とは使う柱が違う)

以下同様。ハノイは簡単。

543 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:19:59 ]
>>541
危なっかしい警告が出てるので、まず潰したほうがいい。
結果はこれと比べとき。
#include <stdio.h>
int Solve(int num, int step, int from, int to, int tmp)
{
if (num) {
step = Solve(num-1, step, from, tmp, to);
printf("%d 手目: %d -> %d\n", step++, from, to);
step = Solve(num-1, step, tmp, to, from);
}
return step;
}
int main(void)
{
int num;
printf("円盤の個数を入力して下さい: ");
scanf("%d", &num);
Solve(num, 1, 0, 2, 1);
return 0;
}

544 名前:デフォルトの名無しさん [2009/03/25(水) 08:23:34 ]
for (list<int>::iterator i = lists.begin(); i != lists.end(); ++i) {
if (iが何かの条件を満たしているとき)
lists.erase(i);
}
とやれば、リストをたどって、条件を満たしている要素全部を消していくことができますか?

545 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 08:46:11 ]
remove_if

546 名前:デフォルトの名無しさん [2009/03/25(水) 09:02:16 ]
RemoveとEraseはなにが違うんですか?

547 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 10:27:35 ]
>>546
あなたのお使いのライブラリの仕様によります。
STLについてなら、RemoveもEraseもありませんのでremove, eraseのことだと思いますのでそれについては以下に。

removeは対象の要素が指定したキーと一致した場合のみ削除しますが、eraseは一致を確認することなく削除します。
但し、removeは対象となるコンテナがlistの場合のみ使用できます。
尚、algorythmにあるremoveは、対象要素を移動しますがメモリの後始末はしないので注意が必要です。

548 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 10:34:29 ]
>>541
円盤の番号を上から1〜n、手順を1から数えるとして、手順mに動かす円盤は手順mを
二進表現したときの最初の1が下から数えて何番目に出現するか数えればいい。

例えば、100手目に動かす円盤を知るには先ず100の二進表現を得ればいい。
これが110100なので、下から3番目が1と判る。つまり、上から3番目の円盤を動かすと知れる。

要は、再帰は必須ではない。

549 名前:デフォルトの名無しさん [2009/03/25(水) 12:19:05 ]
>>547
ありがとうございます。VC++9を使ってます。
listの中を1周しながら、条件に合うものをerase()しているのですが、1周する途中で
デバッグエラーに引っかかります。何が間違ってるのでしょうか?





550 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 12:26:29 ]
要素の追加、削除した後のiteratorって保障されないんじゃないの?
remove_ifとかした後で、いらない要素をまとめてeraseすればいいんじゃないだろうか

551 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 12:35:17 ]
>>544
erase() に渡されたイテレータは無効にり、無効なイテレータは
インクリメントできない(未定義動作になる)。
www.google.co.jp/search?q=%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF+%E7%84%A1%E5%8A%B9


552 名前:541 mailto:sage [2009/03/25(水) 17:06:53 ]
お礼が遅くなってすみません。
大丈夫みたいですね。どうもありがとうございました。

553 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:32:34 ]
list< int >::iterator i = lists.begin();
while ( i != lists.end() ) {
i = lists.erase( i ); // erase()は削除した要素の次の要素を指すイテレータを返す
}

こんなかな。っていうか、STLでは自前のループはなるべく書かない。

554 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:54:06 ]
C++で変数(例えばdouble型)に#INFを代入する方法はないでしょうか?
出来れば環境依存しない方法を探しています。

555 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:59:03 ]
依存無しは無理だろ
浮動小数にIEEE754を使うことが定められてるわけじゃないから
INFなんてものが存在するとは限らないし

556 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 18:40:44 ]
>>554
std::numeric_limits<double> infinity()

存在するかどうかのテストも用意されてたはず。

557 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 18:41:42 ]
>>554
環境依存だろうけど
x=1e+1000;

558 名前:デフォルトの名無しさん [2009/03/25(水) 21:59:14 ]
Windows(Vistaです)のC++でsleep(秒)を使おうと思っているのですが、どのヘッダを
インクルードすればよいのかわかりません。結局
#include <windows.h>
をインクルードして、
Sleep(ミリ秒);
を使ってますが、Windowsでsleep()はつかえるのでしょうか?


559 名前:sage [2009/03/25(水) 21:59:39 ]
すみません。古い技術で恐縮ですが、
VB6用のDLLをVC++で作成するとき、
VB6で使用するタイプライブラリはどのように作成するのでしょうか?



560 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 22:21:08 ]
>>558
それしかありません

561 名前:デフォルトの名無しさん [2009/03/25(水) 22:53:14 ]
>>560
わかりました。
ありがとうございます。


562 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 00:48:06 ]
VC6.0でビットマップAの特定座標にビットマップBをコピーして、
それらを一切表示せずにビットマップCとして保存したいのですが、
BitBltという関数を用いれば可能なのでしょうか?

563 名前:デフォルトの名無しさん [2009/03/26(木) 01:26:02 ]
C++で、名前なし名前空間に関数を書いた場合とただのスタティック関数は、機能面から
考えたら同じと思っていいですか?
そのファイル内からだけ使えるという点で。


564 名前:デフォルトの名無しさん [2009/03/26(木) 01:37:41 ]
おい、誰か答えろや。
答えんかい!

565 名前:デフォルトの名無しさん [2009/03/26(木) 02:43:02 ]
関数使わなくても
座標計算してあとは合成すればいい
まああれだ

566 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 03:26:22 ]
>>564
ちょっとだけ違う

567 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 03:54:26 ]
そのへんは週刊 名前空間・創刊号に詳しく載ってるから買ってくるといい
確か初回は特製boost::binderがついてくるはず

568 名前:デフォルトの名無しさん [2009/03/26(木) 05:27:59 ]
>>566-567
ほんとに役に立たないスレだな。
もっとちゃんと答えろ。
こっちは眠いのを我慢してレス待ってんだから。
早くしてくれや。


569 名前:デフォルトの名無しさん [2009/03/26(木) 06:28:20 ]
あー眠い眠い。早く教えてくれ。寝ちまうぞ。




570 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 06:55:12 ]
いいよ。

571 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 06:57:10 ]
おやすみー

572 名前:デフォルトの名無しさん [2009/03/26(木) 07:04:18 ]
>>570-571
はやく助けろや。
こっちは急いでんだわ。


573 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:15:17 ]
おぅ。わかった。すぐに答えるからちょっと待ってろ

574 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:21:27 ]
>>563
リンケージが違う。といっても、どのみちファイル外からはアクセスできないんで
あまり実用上の違いはない。

「リンケージが違う」ことを意識して、わざと違いの出るサンプルを作るとこんな感じ。
他にもあるかもしれないけどね。

template<void (*)()> int t() { return 0; }
namespace { void an() {} }
static void st() {}
int main() { return t<an>(); } // t<st> はコンパイルエラー


575 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 07:28:56 ]
もっとわかりやすく説明しろよカスども

576 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 08:39:31 ]
あたまだいじょうぶでちゅかあ?
ことばわかりまちゅかあ?

577 名前:デフォルトの名無しさん [2009/03/26(木) 08:44:02 ]
わからないでちゅ・・・

578 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 08:56:46 ]
意味もなく盛り上げてんじゃね〜よ

579 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 09:10:06 ]
>>574
ダメだよこういう時は嘘を教えなきゃ。



580 名前:デフォルトの名無しさん [2009/03/26(木) 09:47:06 ]
浅く寝ちまったよ。

>>574
ありがとョ。でもVC++2008だと、t<st>でもt<an>でも両方とも
コンパイルできたけど?ほかの環境でも試したほうがいいのかな?


>>579
うるせーやつだな。


581 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 11:50:38 ]
>>580
> ほかの環境でも試したほうがいいのかな?
試さなくていいよ。

582 名前:デフォルトの名無しさん [2009/03/26(木) 12:45:35 ]
>>581
そうか、まあまずリンケージから理解するかと思って調べたらこんなの出てきたんだけど、
ほんとかどうかついでに教えてよ。


C 言語と C++ 言語では const キーワードを使うことで定数を宣言することができます。
例えば const int cardmax=13; のように使用できます。これが単一のモジュールだけで
使われるのならば問題がないのですが、複数のモジュールにわたって使われる場合、
C言語と C++ 言語では constのリンケージが違うので、注意が必要です。具体的には
C言語では外部リンケージをもち、C++ 言語では内部リンケージを持ちます。つまり
C 言語では他のモジュールから使用する場合、そのモジュール内で
extern const int cardmax;
と宣言すればこの定数は使用可能ですが、C++ 言語では同じようにしても参照する
ことはできません。C++ 言語で外部から const オブジェクトを参照したい場合には、
定数を定義するときに、
extern const int cardmax=13;
のように定義する必要があります。


583 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 12:49:13 ]
>>582
正しいよ。
ちなみにCでconstで内部リンケージを持たせるなら
static const cardmax=13;
ってやる。

584 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 15:14:19 ]
>>580
へぇ VC++ だと通るのか。独自拡張じゃないかな? /Za でエラーになるかも。

ちなみに Cygwin の gcc 3.4.4 ではこんなエラーになる。
: In function `int main()':
:4: error: `st' is not a valid template argument
:4: error: no matching function for call to `t()'


585 名前:デフォルトの名無しさん [2009/03/26(木) 22:18:37 ]
>>584
/Zaのつけ方を教えて。


586 名前:デフォルトの名無しさん [2009/03/26(木) 22:36:10 ]
>>585
つけ方がわかったんで、つけてもう一回コンパイルしてみたけど、それでも
結果は同じ。どっちでも通るけどな。

587 名前:デフォルトの名無しさん [2009/03/27(金) 02:07:55 ]
まったくお前らのせいで昼夜逆転しちゃったよ。
はやく解クレや。
今はカップ麺にお湯入れたんで、完成待ち。
やっぱ夜はいいな、静かでな。

588 名前:デフォルトの名無しさん [2009/03/27(金) 13:02:08 ]
なんかカキコが減っちゃったな。
俺のせいかな。
悪かったよ。もう消えるわ。
じゃあな。


589 名前:デフォルトの名無しさん [2009/03/27(金) 23:33:13 ]
なんか難しい方のスレで聞いちゃったみたいだからこっちで聞きなおしますね。
それにしても初心者スレって沢山あってどこで聞けばいいか良く解らないけどここにする。

C言語は上から順番に処理されるんだよね。
そうすると、割り込むみたいなことは許されないんだよね?
例えばfor文のループ中にキーを押したらそのときのtimeを取れるみたいなのは無理?
for( )
・・・・・・・・・
if(getchar

見たいなのじゃなくて、for文でゲームみたいなの動かしたいんだけど、
その途中でどんな途中でもtimeが取れるみたいなことは出来ないですか?



590 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 23:50:42 ]
>>589
_beginthreadex

591 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 00:04:52 ]
つ _kbhit()

592 名前:589 [2009/03/28(土) 01:09:16 ]
ありがとうございます。

593 名前:デフォルトの名無しさん [2009/03/28(土) 05:28:17 ]
>>589
スレッドを作るんだよ。2つのスレッドを作ってそれぞれにHello world出力
させてみろ。話はそれからだ。
あとは環境を書けや。WindowsかLinuxか。


594 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 07:06:38 ]
スレッド信者ウゼ

595 名前:デフォルトの名無しさん [2009/03/28(土) 07:30:11 ]
>>594
信者もなにも、基本だろ。
クソな書き込みするくれーなら、意味のあること書いてミロ。


596 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 07:57:08 ]
_kbhit()にしてもどんなタイミングでも実行させるならマルチスレッドでやるしかないだろう

597 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 08:19:14 ]
USBから自作した機器の制御とかをやりたいと思い、Windowsのドライバのプログラミング
について勉強しようと調べてたんですが、ググっても本の通販ページばかり出てきて
何が必要なのか、どのようにして作るのかがまったく分かりません。
どこか基本的なところから作り方解説してくれてるサイトありませんか?
本買えと言われるかもしれかいけど、本買うかはドライバ開発ってどんな感じなのか
知って、本当にやってみようか考えてから買いたいんです。

598 名前:デフォルトの名無しさん [2009/03/28(土) 08:26:05 ]
めちゃくちゃ環境依存(処理系依存)の問題だと思うので、こちらで質問です。
下記のように、CHogeHogeのクラス変数を初期化するのに、別のシングルトンクラス(CHoge)のメソッドの
戻り値を与えるコードを書いたところ、CHogeHogeのクラス変数を初期化するタイミングではまだCHogeが
生成されておらず、落ちます。コメント内のコードもうまくいきそうですがNGです
恐らくリンクオプションとか、pragmaで逃げられそうに思うのですが
対策方法を教えてください。処理系はVC6 SP5です

「CHogeHoge.cpp」
CHogeHoge* CHogeHoge::s_pInstance = new CHogeHoge(); // static
CHogeHoge* CHogeHoge::GetInstance()
{
return s_pInstance;
}
int CHogeHoge::GetValue()
{
return m_Value;
}

/* -- これもNG
CHogeHoge CHogeHoge::s_Instance; // static
CHogeHoge* CHogeHoge::GetInstance()
{
return &s_Instance;
}
*/

「CHoge.cpp」
const int CHoge::STATIC_VALUE = CHogeHoge::GetInstance()->GetValue();
なお、GetInstance内でnewすれば問題解決するとは思いますが、それ以外の方法でお願いします。


599 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 08:32:03 ]
>>598
言ってることと書いていることが違う気がするのは気の所為か?
私にはCHogeクラスの変数をCHogeHogeクラスのメンバ関数で初期化しているように見えるのだが。
つーか、設計を見直すと言う選択肢はないのだろうか。



600 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 08:46:03 ]
CHogeの実装をCHogeHoge.cppに入れればいいんじゃね?

601 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 08:51:34 ]
class CHoge {
CHoge & instance() { static CHoge h; return h; }
};

void CHogeHoge::init()
{
m_Value = CHoge::instance().value;
}


602 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 09:05:29 ]
>>596
入力反応に対応出来る範囲をうまく見積ればどうとでもなる
for(){
int i = 0;
l_c:
switch(_kbhit()?0:++i){
case 0: printf("time");goto lc;
case 1: ~;goto lc;
case 2: ~;goto lc;
default:
}}

603 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 09:27:12 ]
>>597
ググった結果から microsoft のサイトのものを見るといい

604 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 10:10:15 ]
>598
>なお、GetInstance内でnewすれば問題解決するとは思いますが、それ以外の方法でお願いします。
なんでそれだと駄目なん?

>めちゃくちゃ環境依存(処理系依存)の問題だと思うので、こちらで質問です。
問題そのものは静的オブジェクトの初期化順序問題として割と有名。
ttp://www.parashift.com/c++-faq-lite/ctors.html#faq-10.13
>601 みたいに関数内 static にするのも駄目?

605 名前:598 mailto:sage [2009/03/28(土) 12:22:45 ]
>601さんの方法でうまくいきました。
しかもインスタンス保持用の変数は、クラス変数である必要すらないってことで、シンプルなので、
今後シングルトンはこの方法を愛用することになりそうです。

>604さん
有名な問題なのですね、勉強になります。

>>なお、GetInstance内でnewすれば問題解決するとは思いますが、それ以外の方法でお願いします。
>なんでそれだと駄目なん?
出来るだけシンプルにしたかったのと、
正攻法の攻略法を知っておこうと思ったからです。

ありがとうございました。

606 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 13:44:42 ]
>>605
> 正攻法の攻略法を知っておこうと思ったからです。

わかってないから質問してるんだろうに、
正攻法で無いと決め付けてるのは何で?

607 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:26:26 ]
>606
私の設計意図から外れるから。

ja.wikipedia.org/wiki/Singleton_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
のJavaの例の後者の方の例でどうしてもやりたかったから。

608 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:28:50 ]
そしてスルーされる>599と>600。
>599の設計を見直すとか、>600のソースを纏めるとか、その辺りが正攻法じゃないのか?w

609 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:33:39 ]
どう転んでも無理なんだから、どこかで妥協するなら、静的メンバで持つのを否定することも選択肢のうちだぜ



610 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:34:50 ]
設計を見直す、は設計の正攻法だけど、設計を変えないといけないから、
対処法の正攻法ではない、と。
単に言葉の問題。変なところに噛み付いてこないでね。

>599は説明ミス。指摘のとおりCHogeとCHogeHogeは逆。
>600は
うーん、
実際のところはCHogeはテンプレートクラスでm_Valueはテンプレートに渡された型からその型のビットサイズを求めてる。
で、これをほかのクラスで定数のように使いたい、っていう感じなんで、一緒のクラスに実装するのは抵抗ありますね。

611 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:38:28 ]
後出しウザい

612 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 16:41:27 ]
まさかとは思うが、1クラス1ファイルじゃないといけないなんて思ってないよな?
そんな阿呆みたいな糞言語と一緒にされたら困るんだが。

613 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 17:03:07 ]
型情報から定数作りたいだけならmy_traitsクラスでも作ってろよ

614 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 17:11:28 ]
相変わらず終わった話に食いつく奴の多いこと。

615 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 17:17:35 ]
上から目線の質問者が、中途半端な認識で勝手に終了宣言しただけだと
なかなかスパッとはいかないね。

616 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 17:49:51 ]
>>610
設計が正攻法じゃないのに正攻法な解決っておかしいだろJK

617 名前:デフォルトの名無しさん [2009/03/28(土) 21:51:53 ]
class Sample {
public:
static void func();
};
という定義をヘッダに書いたとき、関数の内容をソースファイルに書く際は、
staticを取って、
void Sample::func() {....}
と書けばいいですか?
staticはつけてはだめなんですか?


618 名前:デフォルトの名無しさん [2009/03/28(土) 22:02:28 ]
>>584
たしかにCygwinで試すと同じエラーになったけど、どうしてだめなのか
ぜんぜんわからん、、、
結構C++歴長いんだけどな。誰かわかる人いる?


619 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 22:03:01 ]
そうだね。そっちにはstaticは付けない。



620 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 22:03:20 ]
>>617
そのとおり。っていうか試せばわかるだろ。

621 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 22:11:39 ]
>>618
ポインタや参照型のテンプレート実引数には外部リンケージを持つ
オブジェクト(へのポインタ)しか使えない。(メンバへのポインタでは関係ない)

14.4.2 Template non-type arguments p1 より
> A template-argument for a non-type, non-template template-parameter shall be one of:
> - an integral constant expression; or
> - the name of a non-type template-parameter; or
> - the address of an object or function with external linkage, including
> function templates and function template-ids but excluding non-static
> class members, expressed as & id-expression where the & is optional if
> the name refers to a function or array, or if the corresponding
> template-parameter is a reference; or
(以下略)


622 名前:621 mailto:sage [2009/03/28(土) 22:12:41 ]
ごめん。
× 外部リンケージを持つオブジェクト
○ 外部リンケージを持つオブジェクトまたは関数

623 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 22:24:28 ]
内部リンケージだと、テンプレートを実体化した先から見えないかもしんないからな。
まあ処理系の実装次第だろうけど、規格としては許すわけにはいかんのだろう。

624 名前:デフォルトの名無しさん [2009/03/28(土) 22:32:26 ]
すごい。
そんな仕様があったんだ。でもその仕様から、名前なし名前空間の中の関数とスタティック関数の
動作の違いを作り出すなんて、あんた頭いいね。
ありがとう。


625 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 22:39:16 ]
>>624
昔 static 付けて定義した関数を template 引数に使おうとしてエラーになって
半日規格を漁ってたことがあってな。こういうのは知ってるかどうかだけの話で、
頭がいいとか言わんよ。

626 名前:デフォルトの名無しさん [2009/03/28(土) 22:40:26 ]
ということは、625はLinux使い?


627 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 22:46:26 ]
gcc なら Linux 使いというのは Windows しか知らない奴の思考パターンだな。
PC 以外では gcc や gcc ベースのコンパイラがたくさん使われてるし、 >584 の
ように Cygwin だってある。それに規格がああなってる以上、 VC++ が異端なだけ。

628 名前:デフォルトの名無しさん [2009/03/28(土) 22:56:20 ]
でもstaticな関数引数をとるテンプレートを使うようなプログラムでgccを使うような人って、
普段はLinux使ってるという気がするけど。
BSD系使いとかSolaris使い?
最近は見かけないし。


629 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:06:44 ]
>>628
なんという俺統計。



630 名前:デフォルトの名無しさん [2009/03/28(土) 23:19:23 ]
じゃあ結局何使いなの?
俺統計かもしれないが、結構同意してもらえると思うけどな。
Linux使ってんでしょ?


631 名前:625 mailto:sage [2009/03/28(土) 23:39:47 ]
なんか変わった人がいるなぁ。
625 の話は「PC 以外」の話で、普段使ってるのは Windows だよ。
>627 も言ってるとおり、 Linux はまったく関係ない。

632 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:08:03 ]
俺も普段は Windows で gcc (Mingw版) 使ってるしなぁ。
Linux と決め付ける根拠も「気がする」とか曖昧な割にしつこい。
まぁ、釣りなんだろうけど。

633 名前:デフォルトの名無しさん [2009/03/29(日) 03:25:48 ]
ごめん。
俺プログラマ結構たくさん知ってると思ってたんだけど、その中にWindows+gccという
組み合わせの人がいなかったもんでついつい変な書き方をしちゃった。


634 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 04:07:54 ]
OSXが触れられてなくて泣いた

635 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 04:39:41 ]
>>633 自分が知ってることが世の中のすべてだと思い込めるその思考回路が信じ難い。

636 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 09:10:55 ]
たかがこれっぽっちのやりとりで
相手の思考回路を把握したと思い込める思考回路とかもな。

637 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 09:25:07 ]
C++ではファイルスコープの宣言として、無名名前空間を使うことが推奨らしいですけど、
これってグローバル名前空間の中に無名名前空間を作ればいいのですか?
逆に、たとえばMyAppという名前空間に無名名前空間を追加しても、ファイルスコープの宣言とはならないのでしょうか。

638 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 09:51:02 ]
>>637
ならない。

639 名前:デフォルトの名無しさん [2009/03/29(日) 10:45:05 ]
1>GameMain.obj : error LNK2005: "class CDXMusic * m_dxmusic" (?m_dxmusic@@3PAVCDXMusic@@A) は既に Frame.obj で定義されています。
1>GameTitle.obj : error LNK2005: "class CDXMusic * m_dxmusic" (?m_dxmusic@@3PAVCDXMusic@@A) は既に Frame.obj で定義されています。
1>CSelect.obj : error LNK2005: "class CDXMusic * m_dxmusic" (?m_dxmusic@@3PAVCDXMusic@@A) は既に Frame.obj で定義されています。
1>C:\.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
ヘッダーファイルで定義されているクラスにstaticをつけないと上のエラーが出るのですが
何故ですか・・・?



640 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 10:57:16 ]
例のスレの人かな。

>>639
そのヘッダファイルがインクルードされる度にm_dxmusicが定義されているからです。

staticを付けると消えるのは、そのシンボルがエクスポートされずファイルスコープになるからです。インクルードしたファイル毎に別々のm_dxmusicが存在する状態になります。

これが意図した動作ではなく、m_dxmusicが複数のファイルで共有するシンボルなのであれば、ヘッダファイルでextern付きの宣言のみを行い、適当な.cppファイルで1度だけ定義しましょう。

641 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 11:40:43 ]
>>637
名前空間の中でもいいよ。あんまり意味無いけど。






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

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

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