はきだめC/C++下級者 ..
[2ch|▼Menu]
536:デフォルトの名無しさん
07/07/19 21:54:41
その方法がわかりません・・・・・

537:デフォルトの名無しさん
07/07/19 22:57:53
一旦、文字列として読み込めばいい。

538:デフォルトの名無しさん
07/07/20 00:55:38
配列と、forとかの反復処理を勉強してください。

539:デフォルトの名無しさん
07/07/20 03:37:06
わざわざ再発明させなくてもいんじゃね?っていつも思う。
てか悪い。C++は良く分からなかった。

#include <stdio.h>
main() {
   int a;
   do {
      printf("値>");
      scanf("%d",&a);
      while (getchar() != '\n') { }
   } while((a < 1) || (a > 9999));
   return 0;
}

540:デフォルトの名無しさん
07/07/20 04:07:14
>>534
fail したら clear してから string へ読み捨てれば

541:デフォルトの名無しさん
07/07/20 22:37:43
じゃあC++における標準入力って何でも文字列で読み込まないとエラー処理できないわけですか…


542:デフォルトの名無しさん
07/07/20 22:52:48
>>541
Cでも同じじゃね?
ってか、入力されるのは実際文字列であってたまたま数字だったら変換してくれてるってことでしょ。
Variantみたいな型が無い時点で>540のようにするしかないかと。

543:デフォルトの名無しさん
07/07/21 01:04:15
>>541
どうしてもっていうならテンキー以外のキーボードをつなげるな

544:デフォルトの名無しさん
07/07/21 06:29:53
人はそれを電卓と呼ぶ。

545:デフォルトの名無しさん
07/07/21 06:57:01
cin.ignore 使えば

546:デフォルトの名無しさん
07/07/21 19:06:59
URLリンク(www.kk19.net)

地球上のキーボードが全てこれだったら、
ちっとはマシな世の中になってたかもな

547:デフォルトの名無しさん
07/07/22 07:58:57
>>546
せめてリターンキーは必要だろう
CtrlとALTときたら普通はSHIFT
指五本あるのになんで三キーしかないのか


548:デフォルトの名無しさん
07/07/22 19:36:32
同時に全部押すことにしか使わないのさw

549:デフォルトの名無しさん
07/07/23 01:49:49
最近は使わないんだろうな。
NTのログインにも使わなくなったからな・・・

550:名無しさん@そうだ選挙に行こう
07/07/29 15:26:31
参照っていうのは『参照!』ってやった時にしかアクティブにならないのがファイナルアンサーですか?

551:デフォルトの名無しさん
07/07/29 21:52:37
ニッポンランゲージでOK

552:デフォルトの名無しさん
07/07/30 14:01:40
構造体を関数で参照した時に
その関数では使わない構造体の中の変数があった時
関数に構造体を渡した時に、
構造体の中の変数が多いとそれだけ何か、処理が増えてしまうのか
それとも「参照!」ってやったときだけ処理されるのかが知りたいです(´・ω・`)


553:デフォルトの名無しさん
07/07/30 14:08:55
参照渡しなら問題ない。

554:デフォルトの名無しさん
07/07/31 00:41:42
>>552
もう少し質問を簡潔にまとめてくれると助かる。
構造体を値渡しすれば関数内で利用されてない変数の有無に関わらずコピーの処理が発生する。
よって、構造体が大きくなればなるほど処理も大きくなる。
これを避けたいのであれば>>553のようにするか、ポインタ渡しすればいい。

555:デフォルトの名無しさん
07/07/31 10:51:52
>>554
日本語の拙い>552に合わせて変な用語を使わなくていいよ。
構造体のメンバを変数と言われるとどうにも理解しにくいから。
#メンバ変数と言おうと要素と言おうとその辺は構わんが。

ついでに注釈。問題の関数がインライン展開されるような代物なら、
参照渡しでなくともコピーが発生しない可能性はある。
従って、迷ったときは値渡しで充分だ。

556:デフォルトの名無しさん
07/07/31 12:05:33
謝罪を賠償しるニダ

557:デフォルトの名無しさん
07/08/01 02:10:49
>>553
ありがとう

>>554
なるほど

>>555
インラインっていうのを始めて知りました
それだとコピーされなかったりするんですね
でもとりあえず参照使っときます

558:デフォルトの名無しさん
07/08/01 02:28:35
恥ずかしい

559:デフォルトの名無しさん
07/08/01 11:49:12
迷ったらconst参照でいいよ。

560:デフォルトの名無しさん
07/09/25 00:02:25
typedef struct __blockData{
uint32_t index;
uint32_t block_size;
struct __blockData *next;
}BlockData;


struct __blockData *next;この部分なんとか
BlockData *next;って書きたいんですけど

なんとかならないっすか?

561:デフォルトの名無しさん
07/09/25 00:05:15
なんとかならないっすね

562:デフォルトの名無しさん
07/09/25 00:14:43
ええーーーやだやだ
ちょっとちょっとそんなぁ

まってくださいよ>>561さん
俺がどんな思いで12分過ごしたと思うのですか?

563:デフォルトの名無しさん
07/09/25 00:35:10
typedefはあくまで再定義
最後の行のBlockData;までいったところで初めて再定義完了になるから
自分を指す場合ちゃんとstruct __blockDataと明示しないと不可。

564:デフォルトの名無しさん
07/09/25 00:39:25
そうなのか

やけ酒するしかないな...
高校生だけどまぁいいかw

565:デフォルトの名無しさん
07/09/25 00:48:04
通報しました

566:デフォルトの名無しさん
07/09/25 00:55:34
>>560
これでいいんじゃね?

typedef struct __blockData BlockData;

struct __blockData{
uint32_t index;
uint32_t block_size;
BlockData *next;
}BlockData;

567:デフォルトの名無しさん
07/09/25 01:04:43
>>566
それはCでもC++でも無理だろ。書き忘れたがC++コンパイラなら
struct BlockData;と前方宣言する事でコンパイルをパス出来た。

568:566
07/09/25 01:08:52
あ、最後に余計な BlockData がついてた。ごめん。

>>567
最後の余計なやつだけ修正すればコンパイルできるよ。
C++ なら前方宣言も要らなくて struct BlockData { BlockData* ... ってできるよ。

569:デフォルトの名無しさん
07/09/25 01:13:22
うへー

570:デフォルトの名無しさん
07/09/25 01:17:52
void *next;

では・・・・だめですかそうですか。

571:デフォルトの名無しさん
07/09/25 01:18:50
uint_ptrと
void *

の使いわけってどうすればいいの?

572:デフォルトの名無しさん
07/09/25 01:26:04
大文字じゃなくて小文字なの?あんま見覚えが無い・・・

UINT_PTRはunsigned intだった気もするけどよく覚えていない

573:デフォルトの名無しさん
07/09/25 04:52:14
a |= b

ってどんな意味なんでしょうか?


574:デフォルトの名無しさん
07/09/25 08:13:47
>>573
a = a | b

575:デフォルトの名無しさん
07/09/25 09:29:14
>>572
UINT_PTRはC99のuintptr_t相当。

576:デフォルトの名無しさん
07/09/25 23:18:36
>>571
int と voidの使い分けは?


577:デフォルトの名無しさん
07/10/18 01:34:33
あげあげ

578:デフォルトの名無しさん
07/10/18 02:00:25
>>571

void* はどんな型のポインタが渡されるか分らない場合に使う。
(キャストしないと参照先を見れない)
int* はポインタが指し示した先がint型であるとされる。

char a = 'a'
int* p1 = (int*)&a;
void* p2 = &a;

となっているとき*p1はエラーにならんが*p2はエラーになる。
なので関数内で使用時のキャストし忘れが防げる…のではなかったかな?

579:デフォルトの名無しさん
07/10/18 08:17:44


580:デフォルトの名無しさん
07/10/18 08:32:36
すみません。書きかけを送信してしまいました。
ハード、ソフト共に同じはずなのに、別のPCではマルチプロセスのミューテックスによる排他制御が上手く働いていないみたいなのですが、
原因として何を疑えばいいのでしょうか。もう全然判んないです。

581:デフォルトの名無しさん
07/10/18 09:30:23
>>580
最小限のコードを晒す

582:デフォルトの名無しさん
07/10/19 08:27:30
『上手く働いていないみたい』といいたい気持ちはわかるが
それでは他人にはわかってもらえませんよ。

583:デフォルトの名無しさん
07/10/19 08:30:39
>>580
今まで偶然動いていただけで同期処理に漏れがあったかだな

584:デフォルトの名無しさん
07/10/19 09:13:13
>>580
うちでは上手く働いている
実力不足じゃね?

585:デフォルトの名無しさん
07/10/20 11:06:18
今まで低速シングルCPUで動いていたが
高速なPCに変えたらおかしくなったとか
クアッドコアに変えたらおかしくなったとか
そういうマルチスレッドプログラムなんかもあるんだろうな。

586:デフォルトの名無しさん
07/10/20 13:03:24
機種依存ソフトなんだろう。

587:デフォルトの名無しさん
07/10/20 16:34:20
方角が悪い。

588: ◆NpJ1Hez.TM
07/10/24 04:48:27

YES!!

589:デフォルトの名無しさん
07/10/25 17:57:28
関数ポインタテーブルとswitch-case文
ってどっちが高速なの?

どっちも個数は100

590:デフォルトの名無しさん
07/10/25 21:02:40
ポインタ

591:要は、実測あるのみ
07/10/29 12:07:48
>>589
一概には言えないが、テーブルの方が遅いことは多分ないと思う。
恐らくは、大差ないと思うが。

592:デフォルトの名無しさん
07/10/30 01:12:14
テーブルが遅くなるケースも充分考えられるよ。もちろん、メモリアクセスの速度を除いて。

単純な例だと、2つの値(分岐先)が交互に来る場合。
こういった規則的なものなら、分岐予測はほぼ必ず成功する(ものが多い)。
最近のプロセッサなら、もっと複雑なパターンでも予測出来るものもある。
一方、テーブルジャンプだと、(普通は)前回と同じ分岐をすると仮定されるので
必ず分岐ミスとなる(ものもある)。

当然、分岐予測ミスのペナルティの大きさも含めて、プロセッサによる差が大きいけどね。

593:デフォルトの名無しさん
07/11/16 19:20:28
>>589
なぜ「switch-case文より関数ポインタテーブルのが高速」だと考えるのか?

条件分岐が排除できるから

では、なぜ条件分岐が排除できると高速になるのか?

実際に実行するコードがかなり前から分かっていれば、
CPUでコードプリフェッチやアウトオブオーダー実行などの最適化を行えるから

関数ポインタテーブルを使えば実行するコードがかなり前に分かるのか?

条件にもよるが、おそらくはノー
多くの場合、直前にならないと関数ポインタの値が分からない

つまり、関数ポインタテーブルを使っても、少なくともx86の場合は速くなりません。
条件分岐なら二者択一でとりあえずどちらかの分岐コードを実行するという手もありますが、
関数ポインタだとそういうこともできないので、多くの場合ストールします。
実際に実行するコードアドレスがかなり前から分かっていて、
そのアドレスを特定のレジスタ(か不変なことが保証されているメモリ)
に保存しておくことができればストールは回避できます。

594:デフォルトの名無しさん
07/11/17 15:25:53
じゃあif-elseでもいいのか


595:デフォルトの名無しさん
07/11/17 19:17:04
選択肢が100個もあれば、速度は分布によっていろいろだろうな。

596:デフォルトの名無しさん
07/11/17 23:16:36
Cカス
Cカス

うるさい人を黙らせる方法教えてください

なるべく合法的な方法がいいです

597:デフォルトの名無しさん
07/11/17 23:30:14
RubyもPythonもphpもUnixも
全部Cで書かれてるんだぞ。
Cはすごいんだぞ。

598:デフォルトの名無しさん
07/11/17 23:35:23
>>596
相手がしゃべった瞬間に大声を出すとか

599:デフォルトの名無しさん
07/11/19 07:11:07
>>596
お前の耳を取ってしまえ

600:デフォルトの名無しさん
07/11/22 00:23:13
C言語でC++の
テンプレート見たいに記述したいんだけど

どうしたらいいものじゃろうか?のぅ?

601:デフォルトの名無しさん
07/11/22 01:03:26
プリプロセッサを駆使する。

602:デフォルトの名無しさん
07/11/22 20:52:15
でどうやってかくの?

603:デフォルトの名無しさん
07/11/23 09:48:29
## を駆使する

604:デフォルトの名無しさん
07/11/24 06:34:15
C++にtemplateが実装されるまでの過程を知ってりゃ話は早いんだがな。
generic.h

605:デフォルトの名無しさん
07/11/27 22:49:30
そうだ、cfrontを使おう(w

606:デフォルトの名無しさん
07/12/01 09:23:34
template<typename T>T*hoge(T*t){return t;}
でNULLを受け取れるようにするにはどうすればいいんでしょう...

607:デフォルトの名無しさん
07/12/01 11:57:46
(void*)NULLみたいに、型付きのNULLを渡す。
でないと、どの型のNULLがほしいか誰にも判らないじゃん。

608:デフォルトの名無しさん
07/12/01 13:28:57
NULLに型など付けれません
ばかじゃねーのw

609:デフォルトの名無しさん
07/12/01 23:02:23
>>606
hoge<int>(0)

610:デフォルトの名無しさん
08/01/18 00:18:25
hashのkeyを

char key[32]で定義しmemcpyを
必要に応じて複数回コールする方法と


struct key_data{
_u32 data;
....
};

みたいな感じで構造体を定義して
_u8 *にキャストして使うのは
どっちが速い?それとも同じ?


611:デフォルトの名無しさん
08/01/18 03:44:57
なんともいえない。
実測。

612:デフォルトの名無しさん
08/01/19 00:12:37
>>608
いくらここが掃き溜めだと言っても限度が・・・

613:デフォルトの名無しさん
08/01/20 21:00:38
コンパイルしたときのエラーに

storage size of 's' isn't known

とでてきてしまいます。
これはどこを直せばいいんでしょうか?
storageって何ですか?

614:デフォルトの名無しさん
08/01/21 10:32:07
>>613
辞書くらい引け。

恐らく、int s[]みたいな変数宣言でもしているんだろ。

615:デフォルトの名無しさん
08/01/21 12:37:58

offsetof(s,m)マクロみたいなので
他クラスのprotectedメンバのオフセットを
取得したいんですがどうすればよいですか?



616:デフォルトの名無しさん
08/01/21 12:41:48
>>615
それができたらprotectedの意味がないとは思わないかね?

617:デフォルトの名無しさん
08/01/22 23:31:19
コンパイルをした時に
converting to ‘int’ from ‘float’

って表示されたらどこが悪いんでしょうか?

618:デフォルトの名無しさん
08/01/22 23:39:07
>>617
floatからintに暗黙の変換を行っている。
明示的にキャストを書けば警告は出ない。

619:デフォルトの名無しさん
08/01/22 23:44:05
>>617
>って表示されたらどこが悪いんでしょうか?
頭……というのはさておき、floatからintではオーバフローが起きる恐れがあるので
気の利いたコンパイラは警告を出すってこと。
# 勿論、出さないようにもできる。

620:デフォルトの名無しさん
08/01/23 00:29:52
>>618-619
お陰様で解決出来ました、ありがとうございます。


621:デフォルトの名無しさん
08/01/28 20:04:43
C++のコンストラクタの中で例外発生させるのは駄目と聞いたのですが
ではnewもbad_alloc投げる可能性があるのでコンストラクタでnewしてはいけないのですか?

622:デフォルトの名無しさん
08/01/28 21:45:32
コンストラクタで例外はまあない方がいいのは確かだが、
ダメというほどではない。
デストラクタは絶対あかんがね。

623:デフォルトの名無しさん
08/01/29 18:08:28
クラスを作る側も使う側もきちんとリソースの管理ができていれば何の問題もない。

624:デフォルトの名無しさん
08/01/30 22:38:50
コンストラクタでの例外については、人によって意見が違うが、
俺は積極的に例外が発生するようにしてる。

じゃないと、不正なオブジェクトが生成されてしまうから

625:デフォルトの名無しさん
08/02/02 23:02:43
仮想コンストラクタとスマートポインタ使えば解決。

626:デフォルトの名無しさん
08/02/12 03:07:41
Phidgetsというハードを制御したいのですが

~略
int servo_simple()
{

CPhidgetServoHandle servo = 0;

//create the accelerometer object

CPhidgetServo_create(&servo);

//open the LED for device connections

CPhidget_open((CPhidgetHandle)servo, 20489);

//Step 1: Position 10.00
printf("Move to position 10.00. Press any key to Continue\n");
getchar();

CPhidgetServo_setMotorPosition (servo, 1, 100.00);

return 0;
}

//int _tmain(int argc, _TCHAR* argv[])
int main(void)
{
servo_simple();
return 0;
}

627:デフォルトの名無しさん
08/02/12 03:08:03
この文で、
getchar();
で入力を待たずにCPhidgetServo_setMotorPosition (servo, 1, 100.00);
を実行したいのですが、getchar();を消しただけでは駄目なのでしょうか?
ド素人な質問をしていると思うのですがどうかご教示下さいませ。

628:626-627
08/02/12 07:42:40
自己解決しました。 getchar();で入力を待たずに実行すると、ハードを認識するのが追いつかずに実行されるようでした。

629:デフォルトの名無しさん
08/02/19 23:09:36
クラスを普通に前宣言する時
class MyClass;

って書けばいいけど、例えば

class MyClass
{
public:
class Foge
{
};
};

みたいに MyClass の中にあるクラス Foge を
前宣言したい時はどうすればいいの?

630:デフォルトの名無しさん
08/02/20 01:39:33
>>629
class MyClass
{
public:
class Foge;
};

class MyClass::Foge
{
};

MyClass の定義無しでの宣言はできない。だからネストされたクラスを
インターフェースに使うと MyClass を前方宣言で済ませるのが難しくなる。

631:デフォルトの名無しさん
08/02/20 22:12:19
一つのソケットに対して送信、受信が交互ではなくて、不定期に発生するような、
プログラムを作ってるんですけども、こういうのってどうするのが良いですか?
交互に通信がある場合ならselect→recv→sendとかで簡単なんですけども
送信が繰り返される場合もあるので悩んでいます。
どなたか教えてください

632:デフォルトの名無しさん
08/02/20 22:58:08
今マインスイーパーを作ってるんですが
それについての質問ってここでしてもいいんですか?

633:デフォルトの名無しさん
08/02/20 23:35:38
>>631
sendリクエストをsignalで受ければいいような。
もし必要ならネットワークスレへどうぞ。

>>632
マインスイーパー程度ならここでもいいと思いますが、
GUIライブラリの使い方なら該当GUIライブラリスレへどうぞ。
マインスイーパースレも参考にどうぞ。

634:デフォルトの名無しさん
08/02/20 23:51:14
>>633
visualC++ 6.0を使って作ってるんですが
地雷の表示と踏んだ後のリセットがうまく出来ないんです

void CMine1View::DispMine()
{
CClientDC dc(this);
CBrush *oldBrush1,redBrush,*oldBrush2;
int iy,ix;
for(iy=2;iy<=Masu+1;iy++)
{
for(ix=2;ix<=Masu+1;ix++)
{
if(Mine_Position[iy][ix]==-1)
{
oldBrush1=(CBrush*)dc.SelectStockObject(WHITE_BRUSH);
dc.Rectangle(ix*Width,iy*Width,
ix*Width+Width,iy*Width+Width);
dc.SelectObject(oldBrush1);
redBrush.CreateSolidBrush(RGB(255,0,0));
oldBrush2=dc.SelectObject(&redBrush);
dc.Ellipse(ix*Width+5,iy*Width+Width+5,
ix*Width+Width-5,iy*Width+Width-5);
dc.SelectObject(oldBrush2);
redBrush.DeleteObject();
}
}
}
AfxMessageBox("地雷 踏みました!");
}

635:デフォルトの名無しさん
08/02/21 03:02:40
>>631
selectが反応したときはrecvする
sendはいつでも何度でも好きなときに好きなだけ繰り返し呼んで良し
何か問題が?

636:デフォルトの名無しさん
08/02/21 03:13:07
トランシーバーと同じ問題じゃないの?どうぞ

637:デフォルトの名無しさん
08/02/27 01:03:33
質問です。
VC使ってて、あるクラスの実体を複数のスレッド内で使ってるのですが、
これって問題あるのでしょうか?
スレッド毎に異なるデータを用意してるので、
クラスのメンバ変数への排他の問題はありませんが、
クラス内にDLLクラスをメンバに作っていて、
スレッド毎に同じDLLにアクセスしています。
こんな使い方って問題ありますか?




638:デフォルトの名無しさん
08/02/27 01:08:24
DLLの提供する関数がリエントラントなら問題ないんじゃね

639:デフォルトの名無しさん
08/02/28 03:27:06
クラスAがあり、クラスAを実体化した際、コンストラクタでクラスBを実体化したとします。
このとき、クラスBがクラスAのpublicな関数を呼び出すためには、
クラスBに対してクラスAの実体のポインタを渡し、そこからアクセスする以外に方法がありますか?
どのような方法があるでしょうか?


640:デフォルトの名無しさん
08/02/28 03:29:48
>>639
ポインタじゃなくて参照使うとか、無理やり違う手段でっていうならグローバル変数とか、
いろいろありそうだよ。

641:デフォルトの名無しさん
08/03/03 15:37:24
>>639
あんま使ったこと無いけどクラスBにクラスAのメソッドをfriendで共有すれば?

642:デフォルトの名無しさん
08/03/03 17:35:21
friendにしてもthisポインタ相当の何かは必要だろ。

643:デフォルトの名無しさん
08/03/03 19:14:59
クラスCのstatic変数に突っ込んで、クラスCの静的メンバ関数から呼んでもらう。

644:デフォルトの名無しさん
08/03/04 12:27:18
>>639
C#でいうdelegate?
URLリンク(d.hatena.ne.jp)

645:デフォルトの名無しさん
08/03/04 21:19:25
グローバル変数なんつー力技を除けば、
どうあっても this は渡す必要がある。
デリゲートだって内部的に this を渡している訳で。

friend は public メンバ呼ぶのには全く関係ないな。

646:デフォルトの名無しさん
08/03/04 23:27:30
>>645
もちろん、何らかの方法でthisを渡す必要はあるだろう。
でも、>>639の場面で、class Bからclass Aのメソッドを直接呼び出すには、class Bがclass Aを知らないといけない。
delegateは、メンバ関数へのproxyとして働くことで、メソッドを定義しているclassを隠すことが出来る。
>>639の場面では、class Bはclass Aを知らなくても、class Aのメソッドを呼び出すことが出来るようになる。

647:デフォルトの名無しさん
08/03/04 23:59:25
そもそも、コンストラクタ内で他のクラスにメンバ関数を呼ばせる事自体
結構危険な事だと思うけどね。

648:デフォルトの名無しさん
08/03/08 17:27:25
コンストラクタで実体化しただけで、
コンストラクタで関数を呼ぶとは書いてないだろ

649:デフォルトの名無しさん
08/03/13 19:06:50
Wikipedia項目リンク
何でstrcpy(s, NULL);は誤りなのですか?

650:デフォルトの名無しさん
08/03/13 19:26:01
>>649
NULLがchar*型じゃないから

651:デフォルトの名無しさん
08/03/13 19:44:01
memsetは問題なく動くからまだいいけど、
普通は、s[0] = '\0';で十分だろ。せいぜいstrcpy(s, "");

652:デフォルトの名無しさん
08/03/13 23:19:50
NULL を脱参照して死亡

653:デフォルトの名無しさん
08/03/24 10:47:50
ファイルを分割したときに変数を大域変数として定義して、
呼び出すためにはどうしたらいいでしょうか?

今ファイルがmain.cpp,hoge.h,hoge.cpp,hage.h,hage.cppとある時に,
全体でのメモリアクセスを調べるためにmain.cppでint型の大域変数を定義して,
hoge.cppとhage.cpp内で値をインクリメントできるようにしたいのですが・・・

654:デフォルトの名無しさん
08/03/24 10:51:04
どんな入門書にも書いてあるよ

655:デフォルトの名無しさん
08/03/24 11:25:16
main.cppで変数定義して、
hage.h,hoge.hでexturn宣言したらエラーが出るのですが、
やり方間違ってますか?

656:デフォルトの名無しさん
08/03/24 11:26:37
>>653
クラスにすることお勧め。

657:デフォルトの名無しさん
08/03/24 13:36:42
どうしてエラーをコピペしないのか。俺らをエスパーだと思ってるのか。

>>655
ソースも見ないで間違ってるかどうか判断できるわけがない。
ソース(その変数に関係するところ)とエラー(いっぱい出てたら始めの3個くらい)を張って。
改めて打つんじゃなくてコピペで。

>hage.h,hoge.hでexturn宣言したらエラーが出るのですが、
externの綴りが間違ってる。ここに書く時に間違えただけならいいんだけど。

658:デフォルトの名無しさん
08/03/24 20:57:56
エスパーしてもらいたいんじゃなくて
原因である可能性の高いものを列挙してもらいたいんじゃない?

んで、それを一通り試して、自己解決しました!って言うの(笑)

659:デフォルトの名無しさん
08/03/25 02:29:45
>>655
やりかたがまちがっている。
.h ファイルはコンパイルする必要はないよ。

660:デフォルトの名無しさん
08/03/25 03:10:31
>>653
[main.cpp]
#include <stdio.h>
void hoge_inc(void);
void hage_inc(void);
int count;
int main(int argc, char *argv[]) {
    count = 0;
    hoge_inc();
    printf("count = %d\n", count);
    hage_inc();
    printf("count = %d\n", count);
    return 0;
}
[hoge.cpp]
extern int count;
void hoge_inc(void) {
    count++;
}
[hage.cpp]
extern int count;
void hage_inc(void) {
    count++;
}

661:デフォルトの名無しさん
08/03/25 11:28:05
スレの内容見ながら直したら解決できました。
出てたエラーは
error LNK2001: 外部シンボル ""int mov_i" (?mov_i@@3HA)" は未解決です。
でファイルの依存関係が間違っていたのが原因でした。

>>656-660
有難うございました。

>>657
申し訳ないです・・・以後気をつけます

662:デフォルトの名無しさん
08/03/26 04:03:10
Windows 限定の話題で申し訳ないんですが、FARPROC 型というのが何なのかよくわからないので質問させてください。
MSDN の CallWindowProc の項目を見ると、FARPROC 型は

 typedef int (FAR WINAPI *FARPROC)();

と宣言されているらしいんですが、WINAPI は __stdcall だから良いとして、FAR というのは何なんでしょうか?
MinGW だと FAR は省略されてるので、付けても付けなくても同じな気がするんですが、
とすると FARPROC=ただの関数ポインタと考えちゃって構わないんですか?

663:デフォルトの名無しさん
08/03/26 04:04:56
16bitアドレッシング時代の残骸だろ。無視して医院で内科医。

664:デフォルトの名無しさん
08/03/26 04:09:15
>>663
ありがとうございます。なんかMS-DOS時代はFARとかNEARとか使ってたらしいのでそういうことなんですかね。
Windows だとこういうマクロとか typedef がやたらと多くて変な所でやたら苦労させられます(;´Д`)

665:デフォルトの名無しさん
08/03/26 11:29:57
どこかに#define FARと定義されているから、
プリプロセスが終われば消えてなくなる。

666:デフォルトの名無しさん
08/03/26 19:20:32
いい時代になったもんだ。

667:デフォルトの名無しさん
08/04/01 23:30:29
コンストラクタを定義しようと思っているのですが
ClassA();
ClassA(int nSize);
と定義して、実体を書く時に

ClassA::ClassA(){
this->ClassA(1);
}

と言う具合に書きたいんですが
error C2273: '関数形式のキャスト' : '->' 演算子の右側で使用できません。
となって出来ません。
何とか、良い方法はありませんでしょうか?
ClassA(int nSize=1);
もあるとは思うのですが、指定した場合、もう少し細かくコードを書きたいのです。


668:デフォルトの名無しさん
08/04/01 23:35:07
ほかのコンストラクタを呼ぶことは今のところ不可能だから、
privateな初期化関数を作ってそれを呼ぶのが常套手段。

669:デフォルトの名無しさん
08/04/08 18:49:12
nanosleepの使用例はどこかにありませんか?

670:デフォルトの名無しさん
08/04/08 22:20:53
>>669
ありますが、何か。

671:デフォルトの名無しさん
08/04/08 22:24:11
nanosleepの使用例なんて腐るほどあるわよ。ネットは広大ね。

って少佐が言ってた

672:デフォルトの名無しさん
08/04/08 22:28:06
あんなの、man引けば使い方なんて一発だろうに。

673:デフォルトの名無しさん
08/04/09 04:07:45
うちのman nanosleepには使用例は載っていないな〜〜

674:デフォルトの名無しさん
08/04/09 06:39:06
手取り足取り教えて貰わないと書けないんですか?

675:デフォルトの名無しさん
08/04/09 07:04:28
URLリンク(www.google.co.jp)

676:デフォルトの名無しさん
08/04/09 08:05:20
Visual C++でnanosleepに当たるものを教えてください

677:デフォルトの名無しさん
08/04/09 08:59:32
Sleep()
指定する時間単位と精度の違いに注意。

678:デフォルトの名無しさん
08/04/09 13:21:59
質問。
URLリンク(www.be-interactive.org)
にあるアクションスクリプトをC++で書き直してみたいんだけど、
辞書データのクラス化と初期化をどうやったらいいのか
分からなくて困ってます。
typedef struct { int x,y; } POINT;
class Stroke { vector<POINT> points; };
class DictItem { vector<Stroke> strokes; };
class Dictionary { vector<DictItem> items; };
と定義してはみたものの、どうデータを流し込んで
やればいいんでしょうか?
もしくはもっと効率的なクラス定義の方法があれば
教えてください。

679:デフォルトの名無しさん
08/04/09 21:09:12
std::map使えばいいんじゃね

680:デフォルトの名無しさん
08/04/10 17:44:25
ダイナミックライブラリとスタティックライブラリの使い分けについて教えてください

681:デフォルトの名無しさん
08/04/10 21:40:05
>>680
C/C++の質問ではありませんのでスレ違いです。

682:デフォルトの名無しさん
08/04/16 02:44:04
ポインタで複数の配列の連続的に扱うことはできますか?

int *p
int A[3] , B[3], C[3];
(p+0) = A;
(p+3) = B;
(p+6) = C;



683:デフォルトの名無しさん
08/04/16 02:47:57
できません

684:デフォルトの名無しさん
08/04/16 13:52:33
そういうコンテナ/イテレータを書くのも勉強になりそうではあるな

685:デフォルトの名無しさん
08/04/17 02:20:38
>>682
unionで配列の位置を一纏めに固定すれば可能

686:回答者も下級なのか、このスレは
08/04/17 08:15:36
>>685
ほほぉ、unionでですか。具体例をどうぞ。

687:デフォルトの名無しさん
08/04/18 00:02:31
VisualC++2008でfopen_sやfopenしてもファイルを読み込んでくれません。
パスはあってるし、DOS窓で実行ファイルと読み込みたいファイルのあるディレクトリに移動してから実行してもダメでした。

fopen_s(&fp, "a.txt","r")
fp=fopen("a.txt","r")
という書き方で間違ってないと思うのですが…

原因としてはどんなことが考えられるんでしょうか?


688:デフォルトの名無しさん
08/04/18 00:31:47
もしかして:
a.txt.txt

689:デフォルトの名無しさん
08/04/18 22:58:27
もしかして:
VisualC++2008 【Express Edition】

690:デフォルトの名無しさん
08/04/19 00:02:10
>>682

int p[9];
int* A=p+0, *B=p+3, *C=p+6;
A[0]=(以下略

じゃだめなん?

691:デフォルトの名無しさん
08/04/19 00:25:14
>>689
そうです

692:デフォルトの名無しさん
08/04/20 02:54:00
>>686
union {
struct {
int A[3],B[3],C[3];
};
int D[9];
} Array;

int *p = &( Array.A[0] );

こんな風に

693:デフォルトの名無しさん
08/04/22 11:59:19
intじゃなかったら使えないな

694:デフォルトの名無しさん
08/04/22 17:51:28
10進数を2進数に変換する方法教えてください

695:デフォルトの名無しさん
08/04/22 17:57:29
2で割って少数以下切捨て、その時の余りをならべる。を繰り返す。

696:デフォルトの名無しさん
08/04/22 18:16:54
以下を実行して
a:0x8049e80 0x8049e80 0x8049e80
A:0x8049e80 0x8049e80 0x8049e80
11 12 13
4 5 6
0 0 0
のようになることを期待していますが11 12 13が1 2 3のままです。どのようにしたらよいか教えていただけると幸いです。
struct data{
double x[3],p[3],q,rm;
};
class Func{
public:
void func1(struct data []);
};
class SubFunc{
public:
void subfunc1(struct data []);
};
続く

697:デフォルトの名無しさん
08/04/22 18:17:29
続きです
int main(void)
{
static data P[3];
Func FC;
FC.func1(P);
for(int i=0;i<3;i++){
cout << P[i].x[0] <<" "<< P[i].x[1] <<" "<< P[i].x[2] << endl;
}
return 0;
}
void Func::func1(struct data A[]){
SubFunc SFC;
SFC.subfunc1(A);
A[0].x[0]=1.0;
A[0].x[1]=2.0;
A[0].x[2]=3.0;
cout <<"A:"<< &A[0].x[0] <<" "<< &A[0].x[0] <<" "<< &A[0].x[0] << endl;
}
void SubFunc::subfunc1(struct data a[]){
a[0].x[0]=11.0;
a[0].x[1]=12.0;
a[0].x[2]=13.0;
cout <<"a:"<< &a[0].x[0] <<" "<< &a[0].x[0] <<" "<< &a[0].x[0] << endl;
a[1].x[0]=4.0;
a[1].x[1]=5.0;
a[1].x[2]=6.0;
}


698:デフォルトの名無しさん
08/04/22 18:27:36
char a[] = "100";

って書くと これどういう意味になるの?

699:デフォルトの名無しさん
08/04/22 18:29:01
>>698
a[0]='1' a[1]='0' a[2]='0' a[3]='\0'

700:デフォルトの名無しさん
08/04/22 18:34:43
>>699
さんきゅ!

701:デフォルトの名無しさん
08/04/22 18:36:19
>>696
SFC.subfunc1(A); 
A[0].x[0]=1.0; 
A[0].x[1]=2.0; 
A[0].x[2]=3.0; 

SFC.subfunc1()呼んで11 12 13入れても、その後上書きしてるじゃん



702:デフォルトの名無しさん
08/04/22 18:55:07
>>701
おっしゃるとおりです。ありがとうございました。

703:デフォルトの名無しさん
08/04/23 01:03:54
コンパイラとリンカのバージョンってどうやって調べるか分かりますか?
ちなみに、使っている環境(って言うのかな?)はCPad for Borland C++Compilerってやつです
あんまり難しい専門用語は分からないんで、初級者でもわかるように教えてくれるとうれしいです

704:デフォルトの名無しさん
08/04/23 01:07:11
無料版の BCC のバージョンは 5.5 しか存在しない。

705:デフォルトの名無しさん
08/04/23 01:34:27
>>704
それはリンカのこと?それともコンパイラのことですか?
超下級者だから全然わからん

706:デフォルトの名無しさん
08/04/23 01:35:44
ちっとも保守される様子がないbccなんかそろそろやめて
mingwやvcのexpress editionにすればいいのに。

707:デフォルトの名無しさん
08/04/23 01:39:43
-v

708:デフォルトの名無しさん
08/04/23 02:19:31
>>704
修正版の5.5.1がある。

709:デフォルトの名無しさん
08/04/24 10:33:03
>>694-695
整数は割っても少数にならないし、小数は扱いにくいから
↓のを繰り返す。

x % 2 //2進数の一桁目がこれででる。
x /= 2 //一桁目を取り出したらずらす。



710:デフォルトの名無しさん
08/04/24 10:47:35
x & 1
x =>> 1

711:デフォルトの名無しさん
08/04/24 15:42:59
1, 2, 4, 8, 16, 32, ... とビット数の数だけ論理和とればいいだけじゃん

712:デフォルトの名無しさん
08/04/24 15:57:14

ごめん。
>>709はマイナスのとき使えな・・くもないか。


713:デフォルトの名無しさん
08/04/24 21:56:29
まず10進数の定義からだな。


714:デフォルトの名無しさん
08/04/24 23:44:04
定義厨もここまできたか

715:デフォルトの名無しさん
08/04/25 09:16:09
パックドBCDかもしれんし、ASCZかもしれん。

716:デフォルトの名無しさん
08/05/06 17:33:03
#include <stdio.h>
struct histgram{
int x;
int y[100];
};
void one(struct histgram *hist);
void two(struct histgram *hist);
int main (void){
struct histgram hist[1] ;
int z;
hist->x = 0;
for(z=0;z<100;z++){
hist->y[z]=0;
}
printf("before***%d***%d***%d***",hist->x,hist->y[0],hist->y[50]);
one(hist);
printf("before***%s***%s***%s***",hist->x,hist->y[0],hist->y[50]);
for(z=0;z<9999999999;z++);
return 0;
}
void one(struct histgram *hist)
{
two(hist);
}
void two(struct histgram *hist)
{
int z;
hist->x = 1;
for(z=0;z<100;z++){
hist->y[z]=1;}}
これで実行するとメモリのエラーが出るんですが、どうすれば解決するでしょうか

717:デフォルトの名無しさん
08/05/06 17:50:14
>>716
2つめのprintfは、%sじゃなくて%dを使うべし。

718:デフォルトの名無しさん
08/05/06 19:50:09
×for(z=0;z<9999999999;z++);
○getchar();

719:デフォルトの名無しさん
08/05/08 06:03:23
それ以前に hist->x は hist[0].x じゃないのか?

720:デフォルトの名無しさん
08/05/08 06:44:04
どっちでもいいんじゃね?

721:デフォルトの名無しさん
08/05/11 01:10:46
ボーランドでコンパイルしたのですが、
E2293 linearEq5.c 4:)が必要
って出ます。
#include<stdio.h>
#include<math.h>
#define MAX_DATA 1000//データ点まで想定
void read_data(double x[],double y[],int &order ,int &data_number)// データファイルの読み込み
{
FILE* ifp;
char ifile[20];
printf("Input the file name of input data:");
scanf("%s",ifile);
printf("何次近似にしますか?:");
fscanf(ifp,"%d",&order);
printf("Input a data number:");
fscanf(ifp,"%d",&data_number);

if((ifp=fopen(ifile,"rt"))==NULL){
fprintf("Can't open input file \"%s\"\n",ifile);
}
途中までです。
一様、visualではこのエラー表示は出ません。
どうしたらいいか教えてください。

722:デフォルトの名無しさん
08/05/11 01:22:34
>>721
Cには参照はありません。visualとやらでエラーが出なかったとすれば、C++としてコンパイルしたのでしょう。

723:デフォルトの名無しさん
08/05/11 03:47:57
>>722
参照って何ですか?

724:デフォルトの名無しさん
08/05/11 09:34:34
>>723
int &

725:デフォルトの名無しさん
08/05/11 12:32:59
>>724
ありがとうございます

726:デフォルトの名無しさん
08/05/15 15:59:47
”プロセスにマッピングされている”というのは具体的には
ヘッダのインポートセクションとかにアドレスが格納されている、という意味ですか?

727:デフォルトの名無しさん
08/05/15 16:06:35
いいえ。

728:デフォルトの名無しさん
08/05/15 17:09:06
ではどういう意味ですか?

729:デフォルトの名無しさん
08/05/15 17:17:01
そのキーワードで検索すれば判る通り、状況によって意味することが違うので単純には答えられません。

730:デフォルトの名無しさん
08/05/16 01:25:27
>>726
タグ打ってくれなきゃ元レスがわかんね


731:デフォルトの名無しさん
08/05/20 01:15:18
c/c++ランタイムってもしかして
c/c++じゃなくてもプロセス起動時にロードされてる?

732:デフォルトの名無しさん
08/05/20 10:18:50
そのプロセスのコードの一部がC/C++で書かれてるならロードされる場合もある。
.dllや.soなら他のプロセスが呼び出してるかもしれん。

733:デフォルトの名無しさん
08/05/23 13:26:56
環境:vc2007
言語:c++

argcに間違ったパスを入れてしまいました。
そのあと何度動かしても、動かした瞬間にargcに間違ったパスが入り
プログラム'******'を開始できません。指定したファイルがみつかりません

というエラーが出ます。

どうやったら、このエラーは出なくなるでしょうか

734:デフォルトの名無しさん
08/05/23 14:13:51
>>733
argcはコマンドライン引数の数。パスなど入らない。
プロジェクトのプロパティのデバッグの動作のコマンドに間違ったものが入ってるとそうなる。

735:デフォルトの名無しさん
08/05/23 14:53:16
>>733
argv にも入れてみるとか……

736:デフォルトの名無しさん
08/05/24 07:33:05
>>733
プロジェクトのデバッグのタブの引数の項と間違えて、実行するプログラムのパスを書き換えたんじゃないのか?とか言ってみる。

737:733
08/05/25 11:26:10
解決しました。ありがとうございます。

738:デフォルトの名無しさん
08/05/25 19:04:50
Visual Studio 2008 Express で VC++の勉強をはじめたばかりの超初心者です。

gcnewを用いてインスタンスを生成し、"->"を使用してメンバ関数を呼び出すと、メンバ関数からメンバ変数をアクセスできません。
ご回答のほど、よろしくお願いします。

739:デフォルトの名無しさん
08/05/25 22:46:16
ref class A

740:738
08/05/25 23:42:33
>>739
ref にしてるんですが、ref じゃだめってことですか?!

741:デフォルトの名無しさん
08/05/26 00:28:28
C++/CLIではじめるならC++かC#のどちらかで始めたほうが楽じゃないかな。


742:デフォルトの名無しさん
08/05/27 23:28:52
>>738
それだけじゃなんとも答えようがない。ここだとスレ違い気味だし、
コードを付けてこっちで聞きなおしてみたらいい。

C++/CLI part3
スレリンク(tech板)l50

743:デフォルトの名無しさん
08/05/29 15:58:07
C/C++言語でプログラムを書いたら、
必ずC/C++ランタイムは使われていますか?

C/C++以外の言語で、C/C++ランタイムを使用している言語はありますか?

744:デフォルトの名無しさん
08/05/29 17:49:30
まったく使わないこともできるな。


745:743
08/05/29 20:36:21
C/C++で書いたプログラムはmain関数の前に
C/C++ランタイムのスタートアップルーチンが呼ばれるそうですが、
まったく使わない事も出来る、とはつまり
main関数の前にスタートアップルーチンを呼ばない事が出来るということでしょうか?

746:デフォルトの名無しさん
08/05/29 21:47:15
空の同名のスタートアップルーチンを自作してリンクすればできるだろ

747:デフォルトの名無しさん
08/05/29 22:32:17
>>745
フリースタンディング環境とか

748:デフォルトの名無しさん
08/05/29 22:51:56
>>745
書ける。組み込みなんか自分で書いたりするゾ

749:デフォルトの名無しさん
08/06/05 00:18:16
ファイルからN(定数)個のスペースで区切られた値を読み込むのに
while(fgets(str,512,fp)){
sscanf(str, "%d %d %d …, %d",
&input[0][ct], &input[1][ct], &input[2][ct], …, &input[N][ct]);
ct++;
}
とやっているのですが、Nを変数にしたい場合、どういう風にすればいいんでしょうか?



750:デフォルトの名無しさん
08/06/05 14:46:39
>>749
C++ なら問題ない。

751:デフォルトの名無しさん
08/06/06 01:24:08
難しいね、C++って、、、、

752:デフォルトの名無しさん
08/06/06 17:22:05
vector t;
をモジュールに引数として渡す方法を教えてください。もう3年も悩んでます。

753:デフォルトの名無しさん
08/06/06 18:57:23
>>749
C++ならvectorでできる。C99なら可変長配列でそのままできる。C89だとmalloc()で確保するしかない。
入力自体は、いずれにしてもループで回すしかない。

754:デフォルトの名無しさん
08/06/06 18:58:00
>>752
何をしたくて、3年間も何を無駄に調べたのか教えてください。

755:デフォルトの名無しさん
08/06/07 00:22:29
>>752
多分調べればわかると思う。

756:デフォルトの名無しさん
08/06/07 23:03:18
なんで .cpp と .h に分けるの?
h に全部書いちゃいけないの?

(javaって1ファイルだよね?)

757:デフォルトの名無しさん
08/06/07 23:08:17
コンパイル激遅でいいならやればw

758:デフォルトの名無しさん
08/06/07 23:23:32
URLリンク(kansai2channeler.hp.infoseek.co.jp)

データ対の大小比較を行った回数を計算し出力するプログラムなのですが
while(1){
count++
while(d[++i]<key)
count++;
count++
while(d[--j]>key
count++;
この部分は
これで合ってるのでしょうか?


759:デフォルトの名無しさん
08/06/08 00:35:08
>>757

遅くなるの?

それは知らなかった。

Boostってhppだよね?
あれ、遅いのに採用してるの?

760:デフォルトの名無しさん
08/06/08 00:38:27
>>759
インクルードってどういうものか分かってる?
ファイルの中身を合成するものなんだよ?
全てのコードをヘッダファイルに書いて
main のある .cpp でそれを全部インクルードしたとすると、
それら全てのファイルの中身を合成したファイルを
毎回コンパイルすることになるんだぜ。
そのファイルの中の1カ所を変更しただけでな。

761:デフォルトの名無しさん
08/06/08 00:40:13
>>759
boost 全部を一気に使う訳じゃないだろ。
まあ、boost 使うとそれなりにコンパイル遅くなるけど。
そのためのプリコンパイル済みヘッダファイルだな。

762:デフォルトの名無しさん
08/06/08 00:42:53
>>760

ただの宣言をするものと思ってた。

>>761

確かに、一気には使わないね。


ありがとう。

763:デフォルトの名無しさん
08/06/08 00:44:28
質問です。
if(整数型)  ってやったときに
数字が0だと偽、符号が正だと真と聞いたのですが
ゼロ以下だとどっちになりますか?

764:デフォルトの名無しさん
08/06/08 00:45:25
>>759
Boostの場合はテンプレート使っていてヘッダに書かざるを得ないという事情がある。
もちろん、ライブラリのリンクという面倒事を回避できるという点も影響を及ぼしているとは思う。
要LIBのものでも必要最低限しかLIBに入れていない。

765:デフォルトの名無しさん
08/06/08 01:02:37
>>763
その説明はおかしい
0が偽で0以外が真

っていうかif(-1)とでもやって試せばどうかね

766:デフォルトの名無しさん
08/06/08 01:54:36
自分で試してあやふやな結果を得るくらいならここで質問して確実な回答を求めます。

767:デフォルトの名無しさん
08/06/08 02:02:47
規格票をおよみください

768:デフォルトの名無しさん
08/06/08 02:06:57
規格以前の問題。
まともな C++ の本読め。

769:デフォルトの名無しさん
08/06/08 06:58:45
まともなC++の本かどうかを判断するには知識が・・・

770:デフォルトの名無しさん
08/06/08 08:51:07
卵が先か鶏が先か。

771:デフォルトの名無しさん
08/06/08 08:57:06
代理出産だー

772:デフォルトの名無しさん
08/06/08 11:56:17

本ならここで聞け

スレリンク(tech板)

773:デフォルトの名無しさん
08/06/08 14:08:28
ここでの回答なら確実だと思ってるのかな。

774:デフォルトの名無しさん
08/06/08 14:09:44
if(-1) (-1に限らず負の数)くらいを試せないのはちょっとしんどいな。
いくらでも試す方法はあるだろうに・・・


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4762日前に更新/249 KB
担当:undef