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


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

★初心者にVisual C++を教えるスレ★ Part25



1 名前:デフォルトの名無しさん [2007/01/10(水) 00:00:39 ]
1 : ◆Manna2uCLg :2005/04/15(金) 13:33:14
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。

質問の仕方については次のページが大変参考になります。
www.hyuki.com/writing/techask.html
myu.daa.jp/osiete/

■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
 (MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。

過去スレ、関連スレなどは>>2-5


411 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 14:50:21 ]
ソースとデバッグ版DLLとpdbファイルがあればおk

412 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 14:54:59 ]
ソース、デバッグ版DLL、pdbファイルあります!
もちょっとだけ具体的に教えてもらえないでしょうか…

413 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 15:32:24 ]
それって開発環境そのまま?
途中で止めてアタッチする手もあるが、環境あるなら
DLLのデバッグ開始すると、実行時にEXE指定しろって言ってくるから
それでそのEXE指定すればいいと思う。
デバッグしたいとこはブレークポイント設定しておけばいいし。

414 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 15:35:06 ]
もしVB側もデバッグしてるのなら、関数呼び出し時にステップインで
DLLとPDBが同じとこにあればソースの場所聞いてくると思うので
そこでソース選べば追えると思うけど、、、

VB呼び出しはもしかしたら違うかもしれん、、、
C/C++からの呼び出ししかやったことないんで。
もしだめなら試すから言ってくれ

415 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 18:25:23 ]
>>413-414
丁寧なご回答ありがとうございます。
でもまだちょっと分かってないです…

DLLですが、メイク時に実行すると
「ActiveXコントロールテストコンテナ」というのが
出ます。
これかのことか!?と思ったのですが、EXE指定はできないっぽいです。

>>414さんの方法は今がんがってる最中です…

416 名前:デフォルトの名無しさん [2007/02/13(火) 20:56:40 ]
質問です。
学校で使っている描画のプログラム(?)をVC++6.0で使いたいと思い、
ヘッダーファイルとライブラリファイルを
Microsoft Visual Studio\VC98 のIncludeフォルダとLibフォルダにそれぞれ入れ、
プログラムをコンパイルしたのですが、

warning LNK4003: ライブラリの形式が無効です; ライブラリは無視されます

とエラーになってしまいます。
これと同様のことをBCC5.5でしても問題ありませんでした。
何か間違っているところがあれば是非教えてください。

417 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:01:20 ]
ライブラリがBCC用なんだろ。

418 名前:418 mailto:sage [2007/02/13(火) 21:40:29 ]
>>417
Win32 Static Libraryでプロジェクトを作りそこにライブラリソースを追加しビルドしました。
そしてできたライブラリファイルで再び試してみると、

ライブラリの形式が無効です  このエラーはでなくなりましたが、
LNK2001 :外部シンボル"関数名"は未解決です  このエラーは消えませんでした。

ライブラリファイルの作り方もよくわからなかったのですが合っているでしょうか?


419 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 21:41:53 ]
"関数名"が、そのライブラリに入っているべきものなら、
どっか、あってないんだろ。



420 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 22:36:39 ]
.NETでダイアログベースで作ってます。
CRectとGetWindowRectを使用して自身の座標を得ることはできたのですが
自身と関係ないWindowの座標を得る場合にはどうしたらいいんでしょうか?


421 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 00:22:20 ]
GetWindowRectだな。

必要とするウィンドウのハンドルを取得するべし。。
.NET Frameworks だけじゃ無理な気がしたので、WinAPI を使いましょう。

422 名前:デフォルトの名無しさん [2007/02/14(水) 12:19:22 ]
エディットコントロールにintの中身を表示させるにはどうしたらいいんですか?
文字列は"”でできました。
変数だけ書いたらエラーでました。

423 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 12:33:45 ]
釣れますか?

424 名前:デフォルトの名無しさん [2007/02/14(水) 14:47:48 ]
編集制御->文字列 = 文字列にな〜れ(数値);

425 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 16:27:57 ]
>>420
なぜ.NETでCRectとGetWindowRectが出てくる?

426 名前:デフォルトの名無しさん [2007/02/14(水) 17:05:59 ]
VC6.0でベースがDIALOGか、SDIで出力結果をDOS窓に出す方法はあるんですか。
はじめからDOS窓アプリにしないとだめですか?


427 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:13:21 ]
AllocConsole?

428 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:18:42 ]
VC++プログラマーちょっとこい!!
ex17.2ch.net/test/read.cgi/news4vip/1171440924/

429 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:31:05 ]
CTypedPtrList<CObList, VALUE*>のSeqValueListを
CTypedPtrList<CObArray, VALUE*>にする時ってどうすればいいんでしょうか?
下のがソースなんですが、やり方が良くわからない。。。orz
CItemInfo::~CItemInfo(){
int iCount;
POSITION pos;
VALUE *pValue;
m_pValueList = &m_SeqValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
m_pValueList = &m_ParValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
}



430 名前:426 [2007/02/14(水) 17:36:11 ]
AllocConsole();
freopen("con", "w", stdout);
printf("hello console\r\n");
//FreeConsole();
でできました。すみません。

431 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:54:01 ]
エディタの背景を黒にカスタマイズしたいのですが、どこにもそんな項目がありません
ちなみにヴァージョン6.0です

432 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 18:57:23 ]
エディター?IDEのかな?
ツールのオプションの書式の背景でない?

433 名前:420 mailto:sage [2007/02/14(水) 21:14:12 ]
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
ってところでpointに入っててrectはサイズを知りたくて使ってただけでした、すみません。

クライアント座標はpointに入ってたのですがスクリーン座標を知るにはどうしたらいいんでしょうか?
SetCapture()でクライアント領域外の座標は得れたんですがクライアントが中心になってしまっています。
よろしくお願いします。

434 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 21:20:59 ]
ClientToScreen

435 名前:420 mailto:sage [2007/02/14(水) 22:51:21 ]
>>434
できました、

436 名前:420 mailto:sage [2007/02/14(水) 22:56:32 ]
できました、ありがとうございます!

437 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:09:02 ]
>>433
それどうみても.NETでない。

438 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:33:46 ]
俺たちはとんでもない勘違いをしていたようだ
.NETとは、Visual Studio .Net 2003の省略形だったんだよ!

439 名前:デフォルトの名無しさん mailto:sage Ω<ナ [2007/02/15(木) 00:04:24 ]
2002 のことも忘れないで上げてください。



440 名前:420 mailto:sage [2007/02/15(木) 00:06:40 ]
まさしくVisualStudio.Net2003の事です。

.NETとは違ったんでしょうか・・・すみません;

441 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:09:27 ]
な……なんだってー!!
……職場にもいるけどな、そういうヒト。
さらにVisual Studio 2005のことも「ドットネット」って呼んでくれるから、
毎回頭の中で翻訳するのが大変。
例「C++でデバッグしていてドットネットが落ちるんだよな〜」「???」

442 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 00:41:29 ]
>>440
.NETと言ったら普通.NET Frameworkのことを指す。

新規プロジェクトの中に.NETとか書かれたテンプレートがあるだろ。
それが.NET Frameworkを使うプロジェクトを作るのに使うテンプレート。

.NET Frameworkには大量のクラスライブラリが含まれているし、
Visual Studioではフォームエディタも使え、作るほうとしては充実しているが、
利用者に.NET Frameworkをインストールしてもらわないといけないのが、
一般的なアプリケーション開発ではネック。
XP SP2あたりから漏れなくインストールされるようになってきているけどね。

443 名前:デフォルトの名無しさん [2007/02/15(木) 10:44:29 ]
Vistaで、インストールされているWindowsコンポーネントを確認すると
.NET Frameworkっていうのがあった。

言い方が良くわからないけど、つまり.NETというのは単なる1つのAPI
ってことで、開発環境を指しているのではない、ということ?

444 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 10:57:02 ]
>>443
.NETの環境向けに開発できるのが、VS .NET

445 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 11:04:02 ]
初心者の場合は自分勝手な略語を使わないできちんと書けばいい
ハードディスクのことをハードと呼ぶやつとか
本人はどういうつもりか知らんけど馬鹿にしか見えない。

446 名前:デフォルトの名無しさん [2007/02/15(木) 11:05:21 ]
なるほど…。
Visual Studio .NETというのは、.NET Frameworkがインストールされている
端末向けの開発環境、ということか。

Windows Vistaには標準で.NET Frameworkがインストールされているけど、
XPはSP2を入れないと.NET Frameworkが入っていないから、
そういう端末を対象とするなら.NET Frameworkが入っているかいないかを
確認しなければならないということか。

447 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 11:10:29 ]
Visual Studio .NETという名前だと .net専用と間違える人が多すぎるから
Visual Studio .NETという名前は使われなくなった。

448 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 11:15:08 ]
あ、俺も以前、ずっと勘違いしてたw
.NETというくらいだからネットワーク=インターネット専用なんだろうな、俺には
関係ないなと…w



449 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 14:39:24 ]
逆にVisual Basicは2005でも.NETを付けておけば良かったのにと思う。
「Visual Basic .NET」 2005という具合にさ。



450 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 22:37:51 ]
Visual Stadio2005 をインストールして
VS2005 C++で
#include <stdio.h>
main()
{
int a;
}
をコンパイルすると
error C4430: 型指定子がありません - int と仮定しました
が出ます
今まではいけてたんですが、わかる方お願いします。


451 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 22:55:09 ]
int main(){
}

452 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 01:11:53 ]
関数の戻り値の型を省略できるのはCだけ。

たぶん拡張子をcにしたり、コンパイルオプションから/TPを外したりすれば、
(int抜きの)main()でも行けると思う。

453 名前:デフォルトの名無しさん [2007/02/16(金) 03:40:09 ]
stringをintにするにはどうすれば?

454 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 03:47:10 ]
>>453
cli::String なのか std::string なのかはっきりしろ。

455 名前:デフォルトの名無しさん [2007/02/16(金) 03:55:21 ]
std::string

456 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:03:33 ]
>>455
std::string s("123");
int i = atoi(s.c_str());

457 名前:デフォルトの名無しさん [2007/02/16(金) 04:07:03 ]
>>456
それができないんですよ
エラーがでます

458 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:08:59 ]
エラーが出ますじゃないでしょ。
どんなエラーが出るのか言いなさいよ。

459 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:09:06 ]
>>457
どんなエラーか書け



460 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:16:54 ]
>>457
そんなんだから成長しないんですよ。

461 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:18:10 ]
>>457
とっとと書けよ。あんぽんたん。

462 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:19:58 ]
同じ奴みたいだな。夜釣りの常習犯か。
pc10.2ch.net/test/read.cgi/tech/1169039760/877



463 名前:デフォルトの名無しさん [2007/02/16(金) 12:45:22 ]
設計でUMLを使ってる人いますか?
マルチスレッドとかUMLで設計できますか?

464 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 13:17:43 ]
UMLは詳しく知らん身だけど
アクティビティ図使えば表現できるんじゃねーかとは思う

が、とりあえずスレ違いだ。

465 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 01:16:40 ]
VC++でゲームを作ろうと考えてるんですが、オススメの入門書等ありませんか?
何件か書店回ってパラパラと立ち読みしてみたんですがどういうのが良いのか分からなくて困ってます。
やはり実用例があるC++でゲームを作るみたいな本が良いんでしょうか。
既出、スレ違いだったらすみませんorz

466 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 11:41:49 ]
ゲ製作技術
pc10.2ch.net/gamedev/
板違いやな

ゲーム製作はC++だけと考えない方がいい。
どの程度の規模で何やりたいかによって、利用する言語は変わると思う。
ミニゲームであれば、HSP/Flashでも創れるし。

467 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 12:34:10 ]
そもそもゲームって時点で入門を超えてる

468 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 12:41:30 ]
初等教育 算数
教養課程 数学 物理 C/C++
専門課程 ゲーム製作

469 名前:デフォルトの名無しさん [2007/02/17(土) 16:22:37 ]
今、Visual C++ の入門書を探しています。
Cの文法は一通り理解しています。
本格的にWindowsプログラミングができるようになりたいので、
これから勉強を始めるつもりです。

数年前、ある先生から、
「Winアプリケーションを作れるようになるためには、
 まずはWinAPIを理解→オブジェクト指向を理解→MFCを使ったプログラミング」
というような段階を踏んで勉強していくといい、と聞きました。
勧められた本が、山本信雄の「はじめてのプログラミング」(全3巻)で、
ほぼ上記の説明通りの構成で書かれている本らしいのですが、アマゾンで見てみたら
残念なことにこの本はVisualC++5.0/6.0向けらしいです。
現行のVC++2005は、6.0から「かなり変わった」と聞いているので、別の本を
買うしかないと思っています。

「2005になって、.NetFrameWorkのクラスを利用するプログラミングに変わって..」
と聞いても、私にはまだよくわからないのですが、前記の「API→オブジェクト指向→MFC」
という学習の進め方自体も、2005になってだいぶ変わったのでしょうか。
多少時間がかかっても構わないので、なるべく体系だった学習ができるような
入門書がいいのですが....

ちなみに最終的に作りたいものは、周辺機器のデバイスドライバのたぐいです。

もし色々な本を読んでいる方がおられましたら、よろしくお願いします。




470 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 17:09:09 ]
Winアプリとデバイスドライバだとあんまり関連性ないよ

471 名前:469 [2007/02/17(土) 17:36:27 ]
>470
すみません。「デバイスドライバ」という書き方では不十分でした。

周辺機器は、光学センサや超音波センサで空間把握をするための装置です。
通信されてきたデータをPC画面上でグラフィカルにモニターするためのWinアプリを
作りたいと思っています。そして、ドライバ周りも一緒にC++でコーディングできればと
考えています。


472 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 18:01:43 ]
VisualC++2005なら5.0/6.0でできてた事はできるよ。
2005で「API→オブジェクト指向→MFC」という学習の進め方もできる。
かなり変わったというよりは、かなり機能が追加された。

473 名前:465 mailto:sage [2007/02/17(土) 18:34:36 ]
>>466
少し探したのですが見つからなかったので助かりました。
そちらの方で聞いてみます。誘導ありがとうございました。

474 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 18:36:05 ]
expressでapiの場合は
リソースエディタやクラスウィザードとか使わないだろうし
2005の本にこだわる意味はないだろうね

475 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 19:20:02 ]
VCは初心者向きじゃないから嫌ならVBやC#を使えということだな

476 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 19:43:12 ]
>>469
COMポートで繋ぐ程度ならデバイスドライバは要らない。
独自のカード経由&そのカードが仕様書しか無い、って話なら別だけど。
で、一つ言っておくなら「オブジェクト指向とMFCは一切関係が無い」。
MFCはWinAPIを手を抜いて使うためのラッパ。
あと、VC6のソースが2005で動かない病に良く効く呪文。
プロジェクト - プロパティ - 構成プロパティ - 文字セット - マルチバイト文字セットを使用する

477 名前:デフォルトの名無しさん [2007/02/17(土) 21:47:28 ]
VC++.NET2003 でWindowsフォームアプリケーションを作っています。
以前コンソールアプリケーションで作成した、Mysqlのクライアントプログラムを
利用したいと考えていますが、mysql.hを追加すると下記のエラーが出ます。
mysql.hは利用できますか?



Open.cpp
WINVER not defined. Defaulting to 0x0501 (Windows XP and Windows .NET Server)
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2146: 構文エラー : ';' が、識別子 'fd' の前に必要です。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2501: 'st_net::SOCKET' : 識別名を宣言するのに、型が指定されていません。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2501: 'st_net::fd' : 識別名を宣言するのに、型が指定されていません。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(358) : error C2065: 'SOCKET' : 定義されていない識別子です。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(358) : error C2146: 構文エラー : ')' が、識別子 's' の前に必要です。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(359) : error C2059: 構文エラー : ')'


478 名前:デフォルトの名無しさん [2007/02/18(日) 03:29:49 ]
C++builder5.0で、なんかの画像コンポーネントに、今手元にある
無毛でくっきり縦線・超美少女小学生のヌード写真(jpg)を貼り付
けたいのですがどうすればいいのかわかりません。

ウインドウの大きさと同期して画像のサイズも変わるようにしたい
です。誰か教えてください。

479 名前:デフォルトの名無しさん [2007/02/18(日) 03:45:06 ]
>>478
まず、その素敵な性癖を直せ。
話はそれからだ。



480 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 07:36:09 ]
まず、その素敵な写真をうpれ。
話はそれからだ。

481 名前:ぶいしー [2007/02/18(日) 16:39:58 ]
DLLのリソースIDについて質問させてください。

拡張DLL、レギュラーDLLともに、
呼び出すクライアントとのリソースIDの重複は気にするのでしょうか?
あるサイトだと、拡張DLLはリソースIDの管理はMFCがやってくれる
みたいなことがかかれていたので・・

どなたかご教授ください。


482 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 17:41:31 ]
>>477
#include <mysql.h>の前に、#include <winsock.h>。もれはこれで
3ヶ月ほど悩んだ。


483 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 20:57:18 ]
Visual Studio 2005なんですけど
SystemParametersInfo(SPI_SETDESKWALLPAPER,NULL,"c:\\a.bmp",0);
でコンパイルはいけるんですが、ソリューションのビルドで
エラーになります
"c:\a.bmp"でもだめです
Vistaでもいけますよね?
解る方お願いします


484 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 20:59:14 ]
>■質問するにあたって
>・エラーや警告のときはエラーメッセージを書きましょう。


485 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 21:21:25 ]
>>483 です
エラーが多いんで伏せてました

リンクしています...
aaa_ch.obj : error LNK2028: 未解決のトークン (0A000022) "extern "C" int __stdcall
SystemParametersInfoW
(unsigned int,unsigned int,void *,unsigned int)"
(?SystemParametersInfoW@@$$J216YGHIIPAXI@Z) が関数 "
int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました。
aaa_ch.obj : error LNK2019: 未解決の外部シンボル "extern "C"
int __stdcall SystemParametersInfoW
(unsigned int,unsigned int,void *,unsigned int)"
(?SystemParametersInfoW@@$$J216YGHIIPAXI@Z)
が関数 "int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました。
E:\C++\aaach\Debug\aaach.exe : fatal error LNK1120: 外部参照 2 が未解決です。

以上です、お願いします。


486 名前:デフォルトの名無しさん [2007/02/19(月) 11:11:35 ]
超初歩的な質問なのですが、
MS Visual C++ .NET で、IntToStr関数を使えないので他の方法を調べてます。
値を文字列に変換するにはどうしたら良いのでしょうか?


487 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 11:15:20 ]
マネージプログラムならメソッドのToString
そうでなければ、boost::lexical_cast、std::(basic_)ostringstream、std::sprintf (_stprintf)と続く

488 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 11:24:28 ]
>>487
下の方法でできました!親切な回答ありがとうございます。

int a=100;
label1->Text = a.ToString();

489 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:21:20 ]
連続で申し訳ないのですが、また質問があります。

別の人が作ったソースで下のようにオーバーロードされた関数があるのですが、
この2つの違いって何なんでしょうか?

CRect hoge(CRect & r) const
{
  :
  :
}

CRect hoge(CRect const & r) const
{
  :
  :
}



490 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:39:02 ]
>>485
必要なライブラリリンクしてないんじゃね

491 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:40:04 ]
>>489
中味は同じでもかまわない
コンパイラが区別できればそれでいい

492 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:42:38 ]
>>489
constの有無。
特にconstな参照は右辺値を受け取れるので、
実質的にその多重定義は右辺値か左辺値かで振り分けられる。

493 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 16:11:30 ]
>>492
右辺値、左辺値とは何を指していますか?
この例だと引数は「r」1つだけなので右辺・左辺関係ないように思えます。

あと & についてですが、& をつけると、変数の値を変更すると
呼び出し元のスコープでもそれが変更される、という風に単純に考えています。

これに const が付くということに矛盾も感じます。
const とは、「この引数は変更不可です」という宣言だと思うのですが、
だとすれば、引数を & で渡す意味がないことになります。

このソース、バグ持ちでしょうか?

494 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 16:25:50 ]
ここはC++相談室じゃないし
くだらない質問は遠慮してほしいな

495 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 16:34:28 ]
>>493
お前が馬鹿なだけだからVCやるまえにC++勉強してこい

496 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 17:03:54 ]
>>494-495
わかりました…
ありがとうございます

497 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 18:35:13 ]
そもそも右辺値、左辺値はC言語の初歩

498 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 19:53:10 ]
>>496
あきらめるなな。最初は分かんないことばかりなんだから。

499 名前:デフォルトの名無しさん mailto:age [2007/02/20(火) 22:01:04 ]
すみません。
プロジェクトのプロパティで、
ランタイムライブラリについての設定周りで質問なのですが、

今/MDでビルドすると上手く行くいき、/MTにしたところ
ヒープの破壊が発生するといった状況になりました。
プロジェクトには自前のDLLを使ってます。
ttp://support.microsoft.com/kb/190799/ja
ここにあるとおり、CRTオブジェクトの操作の不備が原因であると
分かりました。

それで質問なのですが、
多くの場合の開発では/MTと/MDどちらを使用するのでしょうか、
/MDの方が、容量が小さくなるし、CRTobjも共有できるようですが、
Cランタイム等がインストールされている必要があります。
/MTだと、ランタイムがインストールされていなくても動作
するようですが、容量が大きく、CRTobjが共有できないようです。

どっちもどっちなのですが、やはり/MDが主流なのでしょうか?



500 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:13:29 ]
何の目的か知らないけど、とくに必要感じなかったらデフォのままで
あとここは初心者スレだし

501 名前:デフォルトの名無しさん [2007/02/20(火) 22:22:00 ]
VC++ というよりはC++の話かも知れませんが教えてください。

CStirng s;
testFunc(&s);

void testFunc(CString s)
{ CString tmp("test"); (*s) = tmp; }

とやると s の値が呼び出し元でも変更されていて、

CString *s;
testFunc(s);

void testFunc(CString *s)
{ CString tmp("test"); s = &tmp; }

とやると変更されていないのはなぜでしょう?

Cのイメージからいくと上の方が変更されずに下で変更されるような気がするのですが・・

502 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:30:08 ]
int *p;
testFunc(p);

void testFunc (int *p)
{ int tmp=1; p=&tmp; }

503 名前:499 mailto:sage [2007/02/20(火) 22:48:00 ]
あ、スレ違いすみません。
他スレに投げてきます。


504 名前:501 mailto:sage [2007/02/20(火) 22:50:22 ]
>>502
すいません。勘違いしていました。
その通りですね。

505 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:52:04 ]
上のやつもあんまり見ない使い方だな
受けたい場合はこういう風に使うのが普通

void GetWindowText( CString& rString ) const;

506 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 22:56:30 ]
素直にCString返せよ。

507 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 00:08:53 ]
それはどうよ。
んまぁ今のCPUじゃ一瞬だろうけどな…

508 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 01:33:29 ]
CStringは参照カウント使ってるから、大したオーバーヘッドじゃないよ。

509 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 06:19:25 ]
オーバーヘッドな気もするけどMFCもこんなことやってるな

CString CListCtrl::GetItemText(int nItem, int nSubItem) const
{
ASSERT(::IsWindow(m_hWnd));
LVITEM lvi;
memset(&lvi, 0, sizeof(LVITEM));
lvi.iSubItem = nSubItem;
CString str;
int nLen = 128;
int nRes;
do
{
nLen *= 2;
lvi.cchTextMax = nLen;
lvi.pszText = str.GetBufferSetLength(nLen);
nRes = (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem,
(LPARAM)&lvi);
} while (nRes == nLen-1);
str.ReleaseBuffer();
return str;
}



510 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 09:41:27 ]
CStringのコピーは、ポインタコピー + αくらいのオーバーヘッドでしょ。

511 名前:デフォルトの名無しさん [2007/02/21(水) 16:45:09 ]
失礼します。
MS Visual C++ .NET にて質問なのですが、テキストボックスのフォントを

textBox1->Font = new System::Drawing::Font("MSゴシック", 10);

このように変更できますが、new しっぱなしで構わないのでしょうか?
また、

textBox1->Font->Name = "MSゴシック";
textBox1->Font->Size = 10;

このように変更できないのでしょうか?
よろしくおねがいします。






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

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

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