[表示 : 全て 最新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でのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。


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
名前空間の中でもいいよ。あんまり意味無いけど。

642 名前:637 mailto:sage [2009/03/29(日) 12:05:28 ]
ありがとうございます。
うちのIDEでは、グローバル名前空間の無名空間がどれも同じ括りで表示されるので、名前空間ごとに把握できたら、
と思ってのことでしたが、グローバル空間に作ることにしました。

643 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 12:12:40 ]
いや、名前空間の中でいいってば。

644 名前:デフォルトの名無しさん [2009/03/29(日) 12:19:03 ]
>>640
ありがとうございます



645 名前:デフォルトの名無しさん [2009/03/29(日) 15:03:01 ]
ruffnex.oc.to/kenji/text/listexport/
↑のツールと例を使ってkernel32.DLLの書き換えに挑戦してるのですが、
上手く行きません。
DLLを作成しようとすると 「 Error 12: Number Overflow : 」というエラーがdefファイルから検出されます。
エラーが出ている箇所は、「HeapSize=d_HeapSize @680」です。
自分で書き換えた箇所を戻して、コンパイルしてみても駄目でした。
コンパイラはdigital Marsのやつです。OSはvista

原因が特定できなくて困ってます






646 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 16:17:12 ]
OSはvista

647 名前:637 mailto:sage [2009/03/29(日) 16:25:23 ]
両方の意見が出たから、安全側とっといた方がいいかなあと思ったんで。
>あんまり意味無いけど。
ということであったし、とりあえずグローバル名前空間の方に書いときます。

648 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 16:39:15 ]
>>647
無名名前空間の効果は名前付き名前空間の中でも変わらない。 >638 はデマ。
そして「あんまり意味無い」のは >642 のような事情が無いことが前提。
名前空間の中に入れたほうが便利なのに、わざわざグローバルに持っていく必要は無い。

649 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 16:52:09 ]
「ファイルスコープの宣言」ということなら >638 は正しいだろ。
「ファイルローカルな宣言」ということなら間違いだけど。

650 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 17:00:39 ]
そもそも C++ に「ファイルスコープ」などというスコープは無い。

651 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 20:46:44 ]
コモンダイアログを用いてファイルの保存等を実装したいのですが、
OPENFILENAMEは定義されていない識別子です、とエラーが表示されてしまいます
何かをincludeすれば良いのでしょうか

652 名前:589 [2009/03/29(日) 20:48:04 ]
あのですね、何度も申し訳ありませんが、kbhitじゃダメでした。
while(!kbhit())とかにしても、したまで実行してからじゃ無いと止まってくれません。
do〜whileとか色々試してみたけどやっぱりダメです。
何かいい方法をよろしくお願いします。>>589

653 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 20:52:33 ]
>>651
msdn.microsoft.com/en-us/library/ms646839.aspx

654 名前:589 [2009/03/29(日) 21:05:25 ]
いいなー、凄いなー



655 名前:589 [2009/03/29(日) 21:06:51 ]
>>654
 ↑
これ無しwwww
NHK見てて間違ったwww

因みに589はマジレスですのでよろしくお願いします。

656 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 21:12:35 ]
void foo()
{
while(1)
{
Sleep(100);
if( _kbhit() )
{
printf("Time:%d\n", clock() );
_getch();
}
}
}

int _tmain(void){
HANDLE handle;
int id;
handle = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)foo, NULL, 0, (LPDWORD)&id);
while(1)
{
Sleep(1000);
printf("var\n");
}
}

657 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 21:17:44 ]
// VC++6.0 SP6
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>

void main()
{
time_t tm;
int i;

while (1) {
if (_kbhit()) {
i = getch();
if (i == 'e') {
break;
}
time(&tm);
printf("%d\n", tm);
}
Sleep(100);
}
}

658 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 21:20:53 ]
>>651です
Commdlg.hが足りていませんでした
事前調べ不足でした。>>653さんありがとうございます

659 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 22:58:15 ]
>>652
ちゃんとやろうとすると C/C++ の規格内では出来ない。
環境が Windows ならメッセージループを作るべきだろうけど…
あるいは既にレスがあるとおりスレッドを作るにしても、
メインスレッドとのやり取りには注意点は多いし。
初心者に説明するには結構こみいった話なんだわ。
ここで全てを説明するのはちょっと無理ってことをわかってくれ。
メッセージループやスレッドの基礎をわかってからまた来い。

660 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 07:24:29 ]
状態移管さえ把握すればCで出来ん訳ない。

661 名前:デフォルトの名無しさん [2009/03/30(月) 08:25:21 ]
VC++を使ってますが、NULLを使おうとすると
#include <iostream>
とかしないとコンパイラが受け付けてくれません。
でも自前のヘッダがあるのでできるならインクルードしたくありません。
このばあいどうすればよいでしょうか
インクルードするしかないですか

662 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 08:28:19 ]
>>661
C++であるなら
NULL は確実に 0 のdefineなので
0 つかっとけ

663 名前:デフォルトの名無しさん [2009/03/30(月) 08:44:19 ]
でもポインタの初期化であることをはっきりさせるためにNULLを使いたいんです。
自分で定義するのはだめですか


664 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 08:51:44 ]
>>661
VCバージョンいくつよ?
VC6なら窓から投げ捨てろ



665 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 08:54:40 ]
NULLが欲しいなら
#include <cstddef>
だろ

666 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 08:55:40 ]
>>663
#ifndef 使ってちゃんと囲っておけば
コンパイルや動作上の意味では問題は起こらないから
好きにすればいいんじゃないかな
重ねて言うがC++では 0 で定義されてるから

>>664
なんにもincludeしてないのにNULLが定義されてるほうがおかしいだろ

667 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:15:52 ]
>>662
実装依存だよ。 gcc なんかは特別な警告が出るように細工してあったはず。

668 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:22:26 ]
ほとんどのプログラムはstdio.hかwindows.hをインクルードするから
どっかでNULLは定義されるな
iostreamは知らん

669 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:49:25 ]
>>667
調べたらほんとに違うんだな

C++ じゃ ((void *)0) はありえないから 0 だぜっての鵜呑みにしてた
どうもありがとう


670 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:58:13 ]
>>668
NULLが定義されてるのは <cstddef> の中(Cなら <stddef.h>)。
それ以外を #include して定義されても処理系依存の動作。


671 名前:デフォルトの名無しさん [2009/03/30(月) 10:27:02 ]
boost::shared_ptr<Test> p = new Test();
boost::shared_ptr<Test> p(new Test());
この2つはどう違いますか?
上のやつだとコンパイルできません。


672 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 10:32:30 ]
shared_ptrはポインタを取るコンストラクタがexplicitなので、
暗黙の型変換はされない。明示的にコンストラクタを呼ぶ必要がある。

673 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 10:33:19 ]
>>670
NULL は cstddef のほかに cstring, ctime, cwchar, clocale, cstdio でも定義されることに
なっている。

C.2.2.4 Macro NULL より
> The macro NULL, defined in any of <clocale>, <cstddef>, <cstdio>, <cstdlib>, <cstring>, <ctime>, or
> <cwchar>, is an implementation-defined C++ null pointer constant in this International Standard.

674 名前:デフォルトの名無しさん [2009/03/30(月) 10:37:20 ]
>>672
ありがとうです。
でもよくわかりませんでした。
boost::shared_ptr<Test> p = new Test();
という書き方は明示的にコンストラクタを読んでないということですか?




675 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 10:47:49 ]
明示的に呼ぶとこうなる

boost::shared_ptr<Test> x = boost::shared_ptr<Test>(new Test);


676 名前:デフォルトの名無しさん [2009/03/30(月) 10:55:12 ]
>>675
それでできました!
Testクラス内にboost::shared_ptr<Test> mInstance;
というポインタを持たせてたのですが、初期化できずにこまってました。
(初期化をコンストラクタ以外の場所で行いたかったため、
mInstance(new Test())
とかってかけなかった。
ありがとうございました!


677 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 10:56:47 ]
>671の前者だと、Test *をboost::shared_ptr<Test>にキャストしようとして失敗するわけだね。

678 名前:デフォルトの名無しさん [2009/03/30(月) 11:16:02 ]
>>677
なるほど。
あと、676のような場合は、scoped_ptr<Test>は使えませんよね?
コンストラクタで初期化しないから。


679 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 11:21:53 ]
>>677,678
微妙に誤解してそうな気がするんだけどうまく説明できないので端的に言うと
>>675
の形でもshared_ptrのコンストラクタは一回しか呼ばれない


680 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 11:25:43 ]
>>676
reset(new Test()) 使えよ。

681 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 11:34:23 ]
>>678
コンストラクタで初期化しないことと scoped_ptr での置き換えの可能性は関係ないと思うよ。


682 名前:デフォルトの名無しさん [2009/03/30(月) 11:46:43 ]
>>680-681
たしかに、scoped_ptr()でreset(new Test())使うとできました。
ありがとうございました。

683 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 12:00:18 ]
すいません。boostをucLinuxに入れようとしてます。
boost_1.38なんですが、boost::conditionが解決できません。
それ以外はコンパイルは通ります。
普通にfedora core7に入れてもだめです。

yum install boost-develだとうまくいくのですが、
なにかやり方があるのでしょうか?初心者ですいません。

684 名前:デフォルトの名無しさん [2009/03/30(月) 12:57:04 ]
クラス内にスタティックなポインタを持たせたいのですが、そのポインタをスマートポインタにできるでしょうか?
class Test {
static boost::scoped_ptr<MyClass> m_MyClass;
};
これの実体を書くところで初期化までしようとしているのですがうまくかけません。





685 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 13:04:21 ]
>>684
とりあえず書いた奴とエラーメッセージと scoped_ptr のマニュアルをよく見るんだ。
それでもわからなければ、以上の全部を添えて相談するといい。

686 名前:デフォルトの名無しさん [2009/03/30(月) 13:24:56 ]
>>685
言われたとおりにもう一回見直してみたらできました。
初期化は
boost::scoped_ptr<MyClass> Test::m_MyClass;
と書きました。あとBoost::scope_ptrのメンバを持つクラスのデストラクタは
privateにしたら駄目なようで、publicにしないとコンパイルできませんでした。
ありがとうございました。


687 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 15:43:17 ]
>>683
自己解決しました。
バージョンによって、ソース変えないといけないんですね。
インクルードを適度に増やして解決しました。

さて、リンクまで行ったんですが、クロスコンパイルで、想定通りには
ライブラリがうまく出来ていません。

bjamの設定でコンパイラにオプションつけるにはどうしたら
いいんでしょうか?

クロス開発なんてしてる人はいないですかねw



688 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:18:14 ]
要はビルド時のコンパイラをクロスのものにしたいんだろ?
bjam -sTOOLS="gcc" -sGXX="/usr/local/cross-tools/sh-hitachi/bin/g++"...
でいいんじゃないのか

689 名前:デフォルトの名無しさん [2009/03/30(月) 23:56:13 ]
WindowsXP
VisualStudio2005のVC++

フォームビューに配置したエディットコントロールで
「Ctrl+A」「Ctrl+X」「Ctrl+C」「Ctrl+V」が全然きかないのですが
これはなんなんでしょうか?
他アプリからコピーした文字列をそのエディットコントロールにペースト
して処理したいのですが。

ググってもどうにも見つからなくて…。

690 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 23:59:03 ]
カスタムからショートカットキーが消えてるとか言うオチはないか?w

691 名前:デフォルトの名無しさん [2009/03/31(火) 00:12:30 ]
そのエディットコントロールにフォーカスした状態で
メニューバーの「編集」をドロップダウンすると
「切り取り」「コピー」「貼り付け」等,全部グレーで選択不能になってる…。
なんか悪いことしたっけ?

692 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 00:19:59 ]
>>689
ウィンドウプロシージャ内でブレーク張って、どこでメッセージが捨てられてるか見てみたら?

693 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 00:22:34 ]
>>689
とりあえず、VC++にではなく、メモ帳あたりにコピペできるか試してみたら?

694 名前:デフォルトの名無しさん [2009/03/31(火) 00:34:31 ]
あれ?
ID_EDIT_COPY等の
OnEditCopyとかを自分で記述しなきゃいけないん?
エディットコントロールって初めからコピー・カット・ペーストくらい
できるんじゃなかったっけ…。



695 名前:589 [2009/03/31(火) 00:42:17 ]
>>659
そうなんですか。どうもありがとうございます。
もっと勉強します。

696 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 00:42:46 ]
編集不可になってるとかってオチじゃないのか?






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

前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