トップページ⇒tech
1001コメント283KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。

【歴代スレ】
1:http://pc5.2ch.net/tech/kako/1059/10590/1059041347.html
2:http://pc5.2ch.net/tech/kako/1067/10671/1067189450.html
3:http://pc2.2ch.net/test/read.cgi/tech/1069719929/ (消滅?)
4:http://pc2.2ch.net/test/read.cgi/tech/1073473867/ (消滅?)
5:http://pc5.2ch.net/test/read.cgi/tech/1077102238/ (dat落ち)
6:http://pc5.2ch.net/test/read.cgi/tech/1082182233/(dat落ち)
7:http://pc5.2ch.net/test/read.cgi/tech/1086373839/(dat落ち)
8:http://pc5.2ch.net/test/read.cgi/tech/1091264964/(dat落ち)
9:http://pc5.2ch.net/test/read.cgi/tech/1094494997/l50
10:http://pc5.2ch.net/test/read.cgi/tech/1097416187/l50
【ラウンジ】質問、回答が長い時はココを使うと見やすい
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

関連スレは>>2-5ぐらい
0002デフォルトの名無しさんNGNG
終了します
0003デフォルトの名無しさんNGNG
【関連スレ(処理系別)】
★初心者にVisual C++を教えるスレ★ Part15
http://pc5.2ch.net/test/read.cgi/tech/1097880265/l50

■MFC相談室 mfc11.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/l50

C++Builder相談室 Part11
http://pc5.2ch.net/test/read.cgi/tech/1094749339/

GCCについて part4
http://pc5.2ch.net/test/read.cgi/tech/1090062751/l50

cygwin + mingwn + gcc 相談室
http://pc5.2ch.net/test/read.cgi/tech/1058134693/

タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/l50

タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/l50

Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/l50

Turbo C++ 5.0 プログラミング
http://pc5.2ch.net/test/read.cgi/tech/1030878794/l50
0004デフォルトの名無しさんNGNG
【関連スレ(その他)】
C言語なら俺に聞け! Part 93
http://pc5.2ch.net/test/read.cgi/tech/1098007606/l50

C++相談室 part37
http://pc5.2ch.net/test/read.cgi/tech/1098543578/l50

暇な人がエレガントにC/C++の宿題片づけます 33代目
http://pc5.2ch.net/test/read.cgi/tech/1097932699/l50

【C++】template 統合スレ -- Part5
http://pc5.2ch.net/test/read.cgi/tech/1091522597/l50

C++は難しすぎ 難易度:2
http://pc5.2ch.net/test/read.cgi/tech/1071697977/l50

C言語の第一歩
http://pc5.2ch.net/test/read.cgi/tech/1031374980/l50
0005デフォルトの名無しさんNGNG
【関連スレ(その他)】
★C言語で遊ぼう!★
http://pc5.2ch.net/test/read.cgi/tech/1028269762/l50

プリプロセッサについて熱く語るスレ。
http://pc5.2ch.net/test/read.cgi/tech/1058203590/l50

C統合・質問スレッド
http://pc5.2ch.net/test/read.cgi/tech/1068359871/l50

フリーコンパイラー使えよ。
http://pc5.2ch.net/test/read.cgi/tech/1061384369/l50

C、C++の最適化について語るスレ
http://pc5.2ch.net/test/read.cgi/tech/1084676298/l50

ラウンジでC言語
http://etc3.2ch.net/test/read.cgi/entrance/1093006298/l50
0006デフォルトの名無しさんNGNG
リクエストにお応えして新スレ立てました。
目についたところはリンクを張り替えましたが、
至らない点などございましたらご容赦ください。

>>2
再開します
0007デフォルトの名無しさんNGNG
>>1
乙
0008前スレ999NGNG
要はmcが消失したテンポラリを参照しているから動作は不定
0009前スレ999NGNG
スマン
いじってるうちに勘違いしてたようだ
前スレ999と8取り消す
惑わして御免
0010前スレ999NGNG
再チャレンジ
こんな感じでx[i]がdouble *のテンポラリを作ってるような気がする
#include <iostream>
#include <iomanip>
#include <memory>
using namespace std;
template<class Container>
class Tester {
const Container& mc;
int mn;
Tester();
public:
Tester(const Container& c, int n): mc(c), mn(n) {}
void disp() {for (int i=0; i<mn; i++) cout << setw(3) << mc[i]; cout << endl;}
};
int main() {
enum { N=3, n=10 };
double x[N][n];
for (int i=0; i<N; i++) for (int j=0; j<n; j++) {x[i][j] = n*i + j;}
auto_ptr< Tester<double*> > p[N];
for (int i=0; i<N; i++) {
double *tmp (static_cast <double *> (x[i]));
p[i].reset(new Tester<double*>(tmp, n));
}
for (int i=0; i<N; i++) {cout << "Tester[" << i << "]: "; p[i]->disp();}
return 0;
}
0011デフォルトの名無しさんNGNG
新しく機能つけるごとにバグがでてくるな
ウインドウズなんか作ってる人ってすごいな
まともに動くだけでもすばらしい
0012デフォルトの名無しさんNGNG
>>11
バグって?
0013デフォルトの名無しさんNGNG
VisualC++.net2003で作ったアプリをビルドして友達に使ってもらおうと思ったんですが
95/98/ME環境の人のみ文字化けしてしまいます。
文字コードの問題?っと思うんですが、ビルド設定に見当たらないんですが
どうしたらいいですか?
0014デフォルトの名無しさんNGNG
newでメモリ確保に失敗することって本当にあるんですか?
0015デフォルトの名無しさんNGNG
>>14
メモリがなくなったりとかしたら当然失敗するでしょ
0016前スレ916NGNG
>>10
返事が遅くなり申し訳ございません。
なるほど……。
べたで展開した場合は、コンストラクタごとに別のテンポラリ変数を作って
それへの参照をコンストラクタに渡していたわけですね。for loop で記述
した場合はテンポラリ変数を使いまわして最適化を図っていたと……。
{ // for loop を再現するよう、べたに展開
  int i=0;
  double *tmp;
  tmp = (static_cast <double *> (x[i]));
  p[i].reset(new Tester<double*>(tmp, n)); // tmpへの参照で初期化
  i++;
  tmp = (static_cast <double *> (x[i]));
  p[i].reset(new Tester<double*>(tmp, n));
  i++;
  tmp = (static_cast <double *> (x[i])); // tmpへの最後の代入
  p[i].reset(new Tester<double*>(tmp, n));
}
しかし勝手にこんな展開をされるのは怖いなあ…。
一時変数は式の最後(';')の時点で寿命が尽きると理解していたのですが
意識を改めなければならないようです。解決。

わかり易い解を有り難うございました。また他の方々も親身になってお答え
くださり、まことに有り難うございました。
0017デフォルトの名無しさんNGNG
>>16
微妙に誤解してる気がするが...

配列とポインタは型が違うのよ
例)
int array [10]; int *pointer;
cout << (typeid (array) == typeid (pointer)) << endl;
結果: 0

Tester <double *>のコンストラクタにx[i]を渡すときに
x[i]は(double [10])から(double*)に暗黙の型変換が起こり(つまり一時変数)
コンストラクタのcはこの一時変数を参照する
そしてmcがcで初期化される

>一時変数は式の最後(';')の時点で寿命が尽きると理解していたのですが
この理解はあってるでしょ
寿命の尽きた一時変数をmcが参照しているので今回のようなことになるわけで
001817NGNG
>17
>今回のようなこと
捕捉すると
つまり動作は不定
表示されたのはたまたま
0019デフォルトの名無しさんNGNG
>>14
俺っちはnewでメモリ確保に失敗なんて一度も無いけどな。
失敗した時のコードを書くのはスペースの無駄。
気にすんな。
0020デフォルトの名無しさんNGNG
>>19
そのプログラムを動かしながら、バックで何かとてつもなくメモリを食う
プログラムが動いていたとしたら?
そうでなかったとしてもそのプログラム自体がとてつもなくメモリを食うとしたら?
0021デフォルトの名無しさんNGNG
仮想メモリだのがあるOSを使ってるとばかみたいにメモリ確保できるから、
メモリ確保に失敗する前にむしろOSがおかしげになりそうではある。
DOSの頃は切実だったけど。
0022デフォルトの名無しさんNGNG
とてつもなくメモリを食うプログラムが
動いていてもメモリ確保出来ちゃうから
特に問題無い。
0023大原ゆきNGNG
なんか、Cスレでもそうなのですが、freeは要らないとか、エラーチェックは要らない
とか、なんだか将来が心配ですね。
0024デフォルトの名無しさんNGNG
遊び程度ならそれで無問題。
0025デフォルトの名無しさんNGNG
>>24
あそびならむしろプロと違って切実な納期とかあるわけじゃないんだから、
ちゃんとこだわって書いていきたいと思う。
エラーチェックはある程度までで仕方ない点はあるけど、
freeはちゃんと書こうぜ。
002624NGNG
>>25
俺はどっちかというとnewやmallocのメモリ確保失敗チェックを
しない、delete、freeをしない奴を揶揄して書いた。

それと24の書き込みは22宛て。時間見て。
0027デフォルトの名無しさんNGNG
そんなのはどうでもいいけど、確保失敗チェックを行って
そのチェックに引っかかったことはあるの?
0028大原ゆきNGNG
>>27
開発中は正常に動作し、テスト中も正常に動作し、一番大事な顧客の前で突然
動かなくなる。
0029デフォルトの名無しさんNGNG
それはメモリ確保の失敗が原因なのか、
他の原因なのか。
0030大原ゆきNGNG
ユーザはそのソフトをどのように使うか解からないし、長時間かけないと
解からないこともあります。
フリーウェアであっても同じ事がいえます。
使う人間が増えればそれだけ露見することも多いでしょう。
0031大原ゆきNGNG
エラーがどこかということは発生してみないとわかりません。
解からない以上、知りうる限りの対策を予め講じておかなければなりません。
エラーが発生して被害を受けるのは顧客だけでなく開発者もそうなのです。
0032デフォルトの名無しさんNGNG
>>19や>>22、>>27などはプログラマに向いてない性格に思える。
0033大原ゆきNGNG
と、言ってしまってから気づきましたが、一つのオブジェクトだけをnewする
場合は、多くの場合、エラーチェックすると「やりすぎ」かもしれません。
上述はたくさんのオブジェクトをnewする時だけの話です。
new/deleteは必ずペアで使う、というのは変わりませんが。
0034デフォルトの名無しさんNGNG
必死ですね。w
0035大原ゆきNGNG
>>34
必死だよ
だって、おみやげの梅ケ枝餅全部食べられたんやもん。
0036デフォルトの名無しさんNGNG
まぁ、生でnew/deleteなんて使わないでコンストラクタでnew、デストラクタでdeleteしてれば
意識する必要もないわけだが。
#精々APIで終了してしまってデストラクタを通らないなんて事が無いよう気にするくらい。
0037デフォルトの名無しさんNGNG
set_new_handlerだっけか
0038デフォルトの名無しさんNGNG
機能追加のために数百カ所書き加えないといけないはめに…
やっぱ地道に書くしかないのかな…
最近こんなんばっか
0039デフォルトの名無しさんNGNG
ここはお前の日記帳じゃないんだ
愚痴をこぼす前に手を動かせ、な!
0040デフォルトの名無しさんNGNG
>>23
プロセス消滅前に態々 free する莫迦の存在が寧ろ心配なんですが。
0041デフォルトの名無しさんNGNG
Visual C++.netを使用して、
VisualC++プロジェクト→.NET→コンソールアプリケーション
で下記を作成し、ウォッチで"tmp->c"を参照しても、2次元配列
の中身が参照できません。

#include "stdafx.h"
#using <mscorlib.dll>
using namespace System;

typedef struct{
    int a;
    int b;
    int c[5][2];
}AAA;
AAA aaa;

int _tmain()
{
  AAA *tmp;

  tmp = &aaa;

  return 0;
}

VisualC++プロジェクト→Win32→Win32コンソールプロジェクト
で作成すると、参照できるのですが、.NETの方で参照できる
方法はあれば、教えて下さい。
0042大原ゆきNGNG
>>40
なるべくプログラムを部品化して再利用した方がコストがかからなくて良い、
というのは賛成していただけるのでしょうか。
もし、賛成していただけるとしたら、その部品がなるべくどの環境でも正常な
動作を期待したいと思うでしょう?
OS任せ→環境依存→再利用が困難→一から作らないといけない→コスト増し
0043デフォルトの名無しさんNGNG
>>40
もちろん>>42の意見は当然なんだけど、
それ以前に「開けたら閉める」ってのは普通の感性だと思うんだけど。
0044デフォルトの名無しさんNGNG
linux上でCPU使用率やメモリ使用率を取得して表示するプログラムを組みたい
のですが、Widowsのように以下のGlobalMemoryStatus関数のようなシステム情報
を取得する関数は存在しますか?
 GlobalMemoryStatus関数
  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/globalmemorystatus.asp

上のような関数でなくとも、システム情報を取得する方法があれば教えて頂きたいです。
0045デフォルトの名無しさんNGNG
デザインパターンの勉強に、あるHPのサンプルコードを参考にさせてもらってるのだけど、

class A
{
public:
virtual void NamePuts() = 0 ;
} ;

class B
{
public:
A* m_low ;

B( A* in )
: m_low( in ) //←
{}

virtual void Puts() = 0 ;
} ;

の、
B( A* in )
: m_low( in )
ってのが、解りません。継承した基本クラスのコンストラクタに値を渡すような書式だけど、
継承してないし、メンバのAのポインタだし…。
: m_low( in )の部分を取ってコンパイルしてみてもエラーは出ませんでしたが、
実行中にエラーがでました。
値を代入しているようには思えますが、どういった意味なんでしょうか?

ちなみに、Bridgeパターンです。
0046デフォルトの名無しさんNGNG
サイト見る前に基礎を学べよ
class Bのメンバをコンストラクタの引数で初期化してる
つーかそれ以外にどういう解釈があるんだ
0047デフォルトの名無しさんNGNG
>>45
継承ではなくてコンポジション(包含)だろ。デザパタ以前にもう少しクラスの
お勉強をした方がいいね。
0048デフォルトの名無しさんNGNG
>>44
topのソース見ればいいじゃないか?
004948NGNG
>>46,47
コンポジションてのは初めて聞きました。OTL
クラスの基礎、もう一度見直したいと思います。
ありがとうございました。
005045=49NGNG
リロードし忘れた…。OTL
>>48ごめんよ
0051デフォルトの名無しさんNGNG
>>42
「プロセス消滅前」と言っている。つか、何で部品化云々の話が?
>OS任せ→環境依存
リソースをマトモに管理できない環境でメモリヒープ使う事自体が自殺行為。

>>43
malloc/calloc/realloc が「開ける」とするなら
free は「閉めた事にする」なんだが。
0052デフォルトの名無しさんNGNG
うわ、なんかマジでfreeネタやってやがるっ!
0053大原ゆきNGNG
>>52
ごめんごめん、もう止めるから。
次回からは俺俺で。
0054デフォルトの名無しさんNGNG
環境:W2K VC++6.0
short型にint型を代入すると、警告レベル4だと警告出るじゃん。
その警告出さない為に、あらかじめshort型で宣言しておきたいんだけど、どうやって宣言すればいいの?

実際は、MSXMLのIXMLDOMDocument2Ptr::preserveWhiteSpaceにVARIANT_BOOL型で代入すると
警告が出るんだけど、VARIANT_BOOLのVARIANT_TRUEって(VARIANT_BOOL)0xffffでdefineされてんだよね。
んで、preserveWhiteSpaceはshort型なもんで、警告がでるの。大丈夫かMS。

この警告を巧く消す方法ってないかな?
0055デフォルトの名無しさんNGNG
なにが「大丈夫か」なのかな。
0056デフォルトの名無しさんNGNG
警告の意味ないじゃん
0057デフォルトの名無しさんNGNG
警告消したら警告の意味ないじゃん
005854NGNG
>>55
別にpreserveWhiteSpaceメンバはshortである必要がないじゃん。
0059デフォルトの名無しさんNGNG
必要か、「VARIANT_BOOL型で代入する」必要はあるの?
0060デフォルトの名無しさんNGNG
>>48
topというコマンドが私のやろうとしている事を行っているみたいですね。
即レスありがとうございましたm(__)m
006154NGNG
>>59
必要ない。
ので、別にオールビット立っている直値でも突っ込みたい気分なんだがそれをやっても警告は消えない。
short型で宣言して値を初期化しようとした段階でエラーになるんだよ・・・。

short hoge = 0xffff; <-警告発生

どうやりゃいいの?
0062デフォルトの名無しさんNGNG
true
006354NGNG
>>62
Thanks!
0064デフォルトの名無しさんNGNG
C++によるプログラミングをはじめてみようと思っている者です。
手元にある書籍は、エディタにコードをうち、Borlandのコンパイラにかけてプログラムを作っていくものです。
これは覚えていくことで将来的にGUIアプリケーションは作成できるものなのでしょうか?
もしかしたらVisualC++などを買わないとGUIは作成できないのではないかと不安です。
0065デフォルトの名無しさんNGNG
>>63
true == 1
006654NGNG
>>65
orz...
0067デフォルトの名無しさんNGNG
FALSE が 0 なら TRUE は -1 が正しい
http://pc5.2ch.net/test/read.cgi/prog/1082154544/l50
0068大原ゆきNGNG
>>64
GUIプログラミングをするのは結構ですが、何か目的あってのことですか?
とりあえずGUIであても無く何かを作りたいと思っているだけでしたら、
そういう考えは捨て、もっと有益なテーマを見つけてからプログラミング
に取り掛かることをお薦めします。
例えば、手書き文字認識に興味があって、その入力ツールを作るために
GUIがどうしても必要だ、ということになって始めてGUIの書き方を学ぶと
良いでしょう。
もっとも、GUIのしくみ自体に興味があるのでしたら、それでも構いませんが。

さて、GUIアプリケーションを作るにあたって、WindowsでしたらWin32API
を使って書けばウインドウを開いたり、一般的なGUIと言えるインターフェース
を構築することは可能です。
Win32APIを扱うためにはVC++でなければならないわけではなく、BorlandC++Compiler(以下BCC)
のような無償のコンパイラでも全く問題なくコンパイルできます。
VC++を使うことのメリットは統合開発環境としてのVC++を利用できる点で、
BCCのような多くの無償コンパイラに付属していない便利な機能が付属しています。
何が便利かというと検索していただければすぐに解かります。
006954NGNG
>>67
あんがと
0070デフォルトの名無しさんNGNG
BCCを使うことのメリットは統合開発環境としてのBCCを利用できる点で、
VC++のようなMSコンパイラに付属していない便利な機能が付属しています。
何が便利かというと検索していただければすぐに解かります。
0071デフォルトの名無しさんNGNG
ちょっと考えてみた
short hoge = ~0;
ダメだよな
0072デフォルトの名無しさんNGNG
#include <stdio.h>
#include <windows.h>
#include <windowsx.h>
int main()
{
int d,e,f;
bool a,b,c;
d=0,e=0,f=0;
a=(d!=0);
b=(e!=0);
c=(f!=0);
if (a||(b&&c))
{
printf("%d\n" , 777);
}
else
{
printf("%d\n" , 999);
}
}
を実行すると
error C2065: 'a' : 定義されていない識別子です。
error C2065: 'b' : 定義されていない識別子です。
error C2065: 'bool' : 定義されていない識別子です。
error C2065: 'c' : 定義されていない識別子です。
error C2143: 構文エラー : ';' が '識別子' の前にありません。
:error C2144: 構文エラー : '<不明>' は '<不明>' によって先行されなければなりません
error C2144: 構文エラー : '<不明>' は '<不明>' によって先行されなければなりません。
error C2146: 構文エラー : ';' が、識別子 'a' の前に必要です。
というエラーが出ます
なぜでしょうか?
0073大原ゆきNGNG
>>72
C++としてコンパイルしていますか?
0074デフォルトの名無しさんNGNG
>>73
拡張子をcppに変更したらいけました
ありがとうございました
0075デフォルトの名無しさんNGNG
c++ の質問です。
CString *s[] = new CString[10];
delete[] s; // 質問:どうして delete s; では駄目なの?
0076デフォルトの名無しさんNGNG
>>75
マルチさんさようなら。
0077デフォルトの名無しさんNGNG
>>75
newならばdelete、new[]ならばdelete[]。
1つと複数では、確保の方法が違う(実装がある)場合があるから
区別が必要。考えるのが面倒臭ければ1つの領域を確保する場合に
new[1]とすることもできるけれども、あまりお勧めしない。
0078デフォルトの名無しさんNGNG
>>77
ぶっぶー
0079デフォルトの名無しさんNGNG
>>77
本当の正しい答えを知ってるけど、もったいないから教えてげないよ。
0080デフォルトの名無しさんNGNG
>>75
もういいから、本を買えよ。
EffectiveC++くらい持っていても存はないよ。
0081デフォルトの名無しさんNGNG
プログラミング言語C++に
(double(rand())/RAND_MAX)
という記述があったのですが rand() を囲っている double にはどういう意味があるんでしょうか?
0082デフォルトの名無しさんNGNG
C++スタイルのキャスト
気になるなら
static_cast<double>(rand())
とフィルタしとけ
0083マイク ◆yrBrqfF1Ew NGNG
>質問:どうして delete s; では駄目なの?

そういうものだから。
あとsの宣言・定義時の[]もいらない。
0084デフォルトの名無しさんNGNG
>>64
まず言語仕様を覚えることから始めないとどうしようもなかんべ。
それをきっちり身に付けてからGUIに逝け。
基本を身に付けずにVCにいくと、何か一つしようとするたびに
ここで質問にしなければ手が出ないようなことになるぞ。

>>70
統合開発環境はBCBだべ。

0085デフォルトの名無しさんNGNG
ある程度でかくなったプログラムはまるで生き物みたいに動き出すね
0086デフォルトの名無しさんNGNG
(void)(*test)->GetErrorName(&errnum_str);
C言語のサンプルコードなのですが、
visual studio.net2003で拡張子を.c -> .cppにしてコンパイルするとエラーがでてしまいます。
こういうコードはC++ではエラーになってしまって通らないのですが、どうしたらいいでしょうか?
0087デフォルトの名無しさんNGNG
>>86
そこ1行だけじゃ良くわからないが、どこかをキャストすればいいような気がする。
0088デフォルトの名無しさんNGNG
>>81
double 入れないと、常に 0 になっちゃう。C の基本だよ。
0089デフォルトの名無しさんNGNG
プログラム実行中にたまに
"pure virtual function called"
と言うエラーが出るのですが原因は何でしょうか?

純粋仮想関数絡みみたいですが対策がわかりません

VC6,SP5適用済みです
0090デフォルトの名無しさんNGNG
>>85
どういうことでしゅか?
0091デフォルトの名無しさんNGNG
>>89
実装の与えられていない仮想関数が呼び出されたってこと。
purecall でウェブ検索してみるといい。
0092デフォルトの名無しさんNGNG
>>86
どんなエラーが出るのか書きなされ。
たぶん、その文を少し修正するだけで C++ でもとおると思われるが。
最初の (void) は不要なんでは?
0093デフォルトの名無しさんNGNG
ICUを利用するとブレークポイントが置けなくなるのですが
解決策しってる人 教えてください
0094モモNGNG
>>93
ICU って http://oss.software.ibm.com/icu/ これのこと?
開発環境はなに?
009589NGNG
>91
おかげさまで解決できそうです。

回答ありがとうございました
009693NGNG
ごめんなさい開発環境書き忘れ VC6.0です。
ICUはソレ
http://oss.software.ibm.com/icu/
です。バイナリ版使うとブレークポイントが使えなくなる
ソースからBuildしてデバッグライブラリを明示的にLinkしたけどダメ
STLportとBoost使ってますが ICUのビルドではSTLportでコンパイルできなかったので
ICUのBuildには 標準のSTLを利用しました

0097モモNGNG
>>96
何かプログラムを作っていて、
そこからライブラリを利用しており、
プログラムのコード上にブレークを置けない
ということですか?
009893NGNG
#include <unicode/ucnv.h>
を書くと、プログラム上にブレークポイント置いても
ブレークポイントが無効にされてしまうんです。
0099モモNGNG
>>98
原因がわからなくてすまんけど、
VC6 って、プロジェクトファイル (.dsp) が不適切だと、
デバッグビルドでもブレーク置けないことがあるよ。
そういうときは、プロジェクトを作り直すと直ることがある。
010093NGNG
解決しました
原因は結局よくわかりませんでしたが
Includeの順番を入れ替えたりしているうちに直ったのですが
その後再現性が全くないのです・・・
単に運が悪かったのかもしれません お付き合いありがとうございました
0101デフォルトの名無しさんNGNG
(;´Д`)…
0102デフォルトの名無しさんNGNG
Windowsアプリケーションを作りたくてプログラミングを勉強しはじめてC++の基礎を
だいたい知ったのですがこの先APIをすっとばしてMFCから学び始めるってのはアリなんでしょうか?
0103モモNGNG
>>102
API を先に勉強するほうがいいと思うよ。
MFC ってこの先将来性あるのかな。
0104デフォルトの名無しさんNGNG
MFCってなんですか?
0105デフォルトの名無しさんNGNG
MFCは使わない方がいいんじゃない?
0106モモNGNG
>>105
そう?何を使うほうがいいと思う?
私は BCB が好きだが。
0107デフォルトの名無しさんNGNG
GTK+。
Windowsは使わない。
0108デフォルトの名無しさんNGNG
>>106
う〜ん、生Win32APIかな。
0109デフォルトの名無しさんNGNG
API->WTLが良いと思う。
Win32系は全部将来消えることが確定してるから(MFCのようにやたら無意味に)苦労して覚える必要は無いと思う。
0110モモNGNG
>>108
Win32 API だけって、実際の製品開発で使われているのかな?
Win32 API だけにするぐらいなら MFC 使うほうがいくらかましじゃないかい?
0111102NGNG
>>103 105
ふむふむAPIを勉強しておいたほうがいいんですね。
APIを学ぶ前にCも勉強しておいたほうがいいでしょうか?それともC++の知識があれば十分でしょうか?
0112モモNGNG
>>111
C++ は C を含んでいるから、C++ を習得したら C も習得したと思っていい。
0113デフォルトの名無しさんNGNG
>>110
MFCで作っているアプリケーションは手抜き
0114デフォルトの名無しさんNGNG
【GUI】wxWidgets(旧wxWindows) その2【サイザー】
http://pc5.2ch.net/test/read.cgi/tech/1097524712/
これ使え
0115デフォルトの名無しさんNGNG
>>109
>Win32系は全部将来消えることが確定してるから

(゚Д゚)ハァ?
0116デフォルトの名無しさんNGNG
オンラインゲームなどにあるチャット機能を作りたいと思ってるんですが、
IME制御の方法がよくわかりません。
サンプルも見つからないし;

詳しい方教えてください
0117デフォルトの名無しさんNGNG
スレ違いかどうかもわからん椰子がまともなものを作れるとは思えんが…
0118デフォルトの名無しさんNGNG
何行くらいになったらcppファイルを分割したほうがいいですか?
今のcppファイルは10000行近くあります
分割した方がいいかな?
0119デフォルトの名無しさんNGNG
>>118
クラス単位で分割。
0120デフォルトの名無しさんNGNG
行数で分けるな。
機能で分けろ。
0121デフォルトの名無しさんNGNG
うわぁ…1関数1000行とかあったりして。
0122デフォルトの名無しさんNGNG
>>119
>>120
クラスは使ってないので関数単位で分けるんですかね?
関数の数も10個くらいあるので分割すると10ファイルもできちゃいそうなんですが
それでもいいのでしょうか?
0123デフォルトの名無しさんNGNG
>>122
分割する必要は無い。

捨てろ。
0124デフォルトの名無しさんNGNG
>>121
一関数につき千行以上あります
一つの関数はなるべくコンパクトにまとめたほうがいいんですか?
0125デフォルトの名無しさんNGNG
>>123
捨てれませんw
0126デフォルトの名無しさんNGNG
>>124
捨てろ。そして書き直せ。
0127デフォルトの名無しさんNGNG
プログラミングを捨てるか、ファイルを捨てるか
漏れは前者をお薦めする
0128デフォルトの名無しさんNGNG
>>124
通りすがりの俺ですら捨てることをお薦めするぜ
0129デフォルトの名無しさんNGNG
なんで捨てなきゃいけないんですか?
理由を教えてください
0130デフォルトの名無しさんNGNG
プログラミングやめる、という手もあるぞ。
0131デフォルトの名無しさんNGNG
さすがにつりだろうなぁ。
天然だとしたら10年ぐらい植物人間してたのかね?
0132デフォルトの名無しさんNGNG
マジレスお願いします
0133デフォルトの名無しさんNGNG
いや、でもリアルであって欲しいってちょっと期待しちゃうな('A`*)



そのソースを渡されたら即効その組織から抜けるが
0134デフォルトの名無しさんNGNG
それ以上縮めようのない関数が多いので1000行超えてるんです
0135デフォルトの名無しさんNGNG
ほれ
http://www.pro.or.jp/~fuji/mybooks/cdiag/
これも初版は10年以上前だぞ。
0136デフォルトの名無しさんNGNG
初心者だから仕方がないです
0137デフォルトの名無しさんNGNG
何するプログラムなの?
0138デフォルトの名無しさんNGNG
縮めようが無いなら、そのままにしとけ。
0139デフォルトの名無しさんNGNG
>>137
移動ルーチンです
0140デフォルトの名無しさんNGNG
1000行より縮めようの無い関数なんて有り得ないな。
0141デフォルトの名無しさんNGNG
初心者ならそのコードは捨てて1から勉強しなおすべきだな。
まだやり直しはできるだろう。
0142デフォルトの名無しさんNGNG
移動ルーチン??
データファイルにでも追い出せそうなことをずらずらハードコードしてるとか?
0143デフォルトの名無しさんNGNG
条件1の場合
条件2の場合
・
・
・
という風に条件文がおおいので行数が多くなるんです
一行あたりの文字数は少ないですが
0144デフォルトの名無しさんNGNG
(´-`).。oO( 「条件別に関数化」とかは考えないんだろうか・・・・
0145デフォルトの名無しさんNGNG
(´-`).。oO(そろそろ"大漁"のAA登場してもいいんじゃないかな…
0146デフォルトの名無しさんNGNG
まさか藤原の翁の本のネタの如く、マウス座標の条件分けしてたりしないだろうなぁ。
0147デフォルトの名無しさんNGNG
>>144
関数にすると引数とかプロトタイプ宣言とかしないといけないんであまりやってませんでした
条件別にしたら一関数500行程度に収まりそうです
関数が多いと関数名考えないといけないのでそれもめんどくさいです
英語での銘々は苦手です
0148デフォルトの名無しさんNGNG
関数1つにつき25行までとする。
0149デフォルトの名無しさんNGNG
>>148
まじっすか?
関数が増えすぎると逆にぶちぶち切れててわかりずらくありませんか?
0150デフォルトの名無しさんNGNG
>>149
おまえプログラミングに向いてないわ

プログラミングを捨てる

これが正解だな
0151デフォルトの名無しさんNGNG
漏れには何も見えない
透明あぼーん設定してるわけでもないのに


あれ?なんか記憶が飛んでしまってるのかな…
0152デフォルトの名無しさんNGNG
>>149
関数が全部自分の頭に入る程度でなくてどうやってメンテナンスするんだ?
よっぽど優秀なエディタを使っているかよっぽど非効率なことやってるかどっちかだとは思うが。
0153デフォルトの名無しさんNGNG
>>149
とりあえず>>135を全部読むまでもう書き込みするな。
ってか、まともに勉強してたら「関数は一目で把握できる長さ」って
常識なのだが。
いったいどういう勉強してきたのかね。
0154デフォルトの名無しさんNGNG
なんか一瞬そのソースを見てみたくなったぞ

一瞬だけな
0155デフォルトの名無しさんNGNG
>>152
できるだけ関数化してサイズを小さくしてみます

ソース分割する際に分割したソースファイルをフォルダに分けて管理したいんですが
勝手にフォルダにファイル入れてもコンパイルしてくれるんですか?
ファイルのパスとかも指定しないといけないんですかね?
0156デフォルトの名無しさんNGNG
>>153
早速読んできます
0157デフォルトの名無しさんNGNG
>>155
しないといけないです。
0158デフォルトの名無しさんNGNG
大学生で、しかも研究室に所属してると予想
もしそうなら、もうじき社会へ旅立つのか…ガクブル
0159デフォルトの名無しさんNGNG
どっちっつうと、WEBの入門サイト読んで我流で勉強って気がする。
研究室なら周りから教えてもらえるからここまで酷くはならないだろう。

>>155
使ってる開発環境なりコンパイラなりのヘルプ嫁。
その前にまともな入門書をきちんと読め。
0160デフォルトの名無しさんNGNG
forでループすりゃ済むことを延々と展開してるとかね
0161デフォルトの名無しさんNGNG
関数化させる意味とかが分かって無いと
本気でこれ以上プログラム書くのはやめて勉強しなおした方が良いと思う

あとmakefileの存在忘れないであげて
0162デフォルトの名無しさんNGNG
>>157
なるほど、パスの指定法をしらべてみます
>>158
>>159
趣味でやってるだけです我流です
0163デフォルトの名無しさんNGNG
書籍代はケチらんようにな
未来への投資だと思えば安い安い
0164デフォルトの名無しさんNGNG
しかし何でこういう質問する椰子ってageるんだろね
0165デフォルトの名無しさんNGNG
質問のときはageろというローカルルールのあるスレが2chに存在するから
0166デフォルトの名無しさんNGNG
質問のときにageるのはまったく問題ない。
0167デフォルトの名無しさんNGNG
というよりage,sage知らないのが大半だと思う
0168デフォルトの名無しさんNGNG
「質問のときはageろ」と「質問者はageろ」とは違う。
0169デフォルトの名無しさんNGNG
誰かマジで教えて。
サンプルある場所でもいいから。
MSDNみたけど、サンプルがないんですよ
>>116
0170デフォルトの名無しさんNGNG
>>169
サクラエディタのソースでも参考にしたら?
0171デフォルトの名無しさんNGNG
この辺でぐぐれ

imm32.dll

ImmGetContext
ImmSetOptionStatus
ImmReleaseContext
0172デフォルトの名無しさんNGNG
IME の返信ありー
検索して調べてみます
0173デフォルトの名無しさんNGNG
>>17
そうか。
ということは、参照渡しで参照メンバを初期化する場合は、
暗黙の型変換が起こらないように気をつけるか、それを監視する
コードが必要なわけですね。

どうやって監視すれば良いのか、ちと考えてみます。
細部にまでわたるご指摘、ありがとうございました。

# とりあえず explicit 宣言周りから調べてみます。

# コンストラクタで size 関数を呼び出して、STL コンテナに
# 型を制限するのは簡単なのですが、静的配列にも使えるように
# するのが一応のゴールなのです。配列型を struct でラップする
# しかないのかなあ。
0174デフォルトの名無しさんNGNG
VC6を使って、UNICODE変数をファイル出力行いたいと思っています。
ファイル出力形式はS-JISでもUNICODEでもいいのですが
変数がUNICODEなのでその方が楽だと思ってUNICODEで出力しています

wchar_twszTest[1000];
FILE *fp = _wfopen( L"c:\\temp\\aa.txt", L"w" );
fputws( L"AAAあいうえおBBB", fp );
fclose( fp );

と実行するとファイルには "AAA" しか出力されず、全角文字以降が無視されています
何を間違えているのかわからないのです。誰か教えて下さい
0175デフォルトの名無しさんNGNG
たぶん
setlocale( LC_ALL, "Japanese" );
0176174NGNG
>>175
ありが�d
即解決しますた
0177デフォルトの名無しさんNGNG
VC++.NETを使っています。
最初から使わないことが分かっている関数をビルド時に
無視することは可能でしょうか?
(したい処理によって#defineで定義した値Tを変えてビルドして
いますが、処理によっては使わない関数もコンパイルするのは時間が
(10秒もしないですが)掛かるような気がして…。)
0178デフォルトの名無しさんNGNG
VC良く知らんが、ソースファイル分けておけば変更が無い分はコンパイルされないのでは?
0179デフォルトの名無しさんNGNG
コンボボックスについて聞きたいのですが、何個かデータが
コンボボックスにある状態で、右の矢印を押すと今は
一つしか表示されません。それを、ずらぁーっと下に表示
させることは可能でしょうか?教えてください。
0180デフォルトの名無しさんNGNG
出来るぽ。
0181デフォルトの名無しさんNGNG
コンソールアプリをvisual C++6.0でしこしこ作ってるんですが、
よくあるiniファイルを扱うソリューションは用意されているんでしょうか?
もしなければどう扱うの一般的ですか?
0182デフォルトの名無しさんNGNG
そりゅーしょん?
GetProFile系のAPIでやっとれ
0183177NGNG
>178さん
ソースコードは分けています。
そーすか(ベタで済みません^^;)、変更はされないのですかね。
でも、ヘッダーファイルで#defineした部分は全てのファイルで
書き換えられているのかなぁという気がします。
0184デフォルトの名無しさんNGNG
>>183
ソースファイルを変更した場合、そのファイルのみ再コンパイルされる。
インクルードファイルを変更した場合、そのファイルをインクルードしているソースファイルが再コンパイルされる。

>>179
ダイアログエディタで▼をクリックしてから枠をドラッグしてサイズ調整。
0185デフォルトの名無しさんNGNG
>>182
おお、こんなんがあるんですね。ありがとう。
0186181NGNG
と、思ったのですが出来なそうですね。
CWinApp::GetProfileXXXというのがあるようですが、NT系だと
レジストリを使うようです。
0187デフォルトの名無しさんNGNG
?
GetPrivateProfile〜
0188デフォルトの名無しさんNGNG
>>186
APIの方はNT系でもiniファイルになる。
http://asia.microsoft.com/japan/developer/library/jpwinpf/_win32_getprivateprofilestring.htm
0189デフォルトの名無しさんNGNG
>>186
MFCでもレジストリ使わないでiniにできるよ。
CWinApp::SetRegistryKey を呼はないようにする。
0190181NGNG
みなさんありがとう。
APIとかMFCとか使ったことないのでそれから勉強してます。
ヘルプ見ても何がなにやら・・・。
0191デフォルトの名無しさんNGNG
>>173
>配列型を struct でラップするしかないのかなあ。
boost::array
0192デフォルトの名無しさんNGNG
C++のスタイルで、みなさんはどれですかー?

1.
a void func( int a ); b void func(int a);
2.
a int GetNumber(); b bool GetNumber(int *n);

どれが一番主流なんだろう。
0193デフォルトの名無しさんNGNG
いや、全然わからん
何を対比させてるんだ。
0194デフォルトの名無しさんNGNG
>>192
1,a
2,a

1は正直どうでもいいが、
2の問いが意味不明だな。例外失敗する可能性あるなら例外飛ばせばいいんでね?
てかポインタじゃなくて参照に汁。
0195デフォルトの名無しさんNGNG
回答者に感謝!

さらに質問
あとできれば、回答者のプログラミングレベル教えてください。( 自己分析で )

3. (空白関係なし)
a. POINT GetNum(); b. bool GetNum(int *x, int *y);

4 戻り値がbool の関数と intなどの値を返す関数 を混同して自作する
( int などのとき、あらかじめエラー値をきめておく。正常値はプログラムで使われる )
a しない b する
0196デフォルトの名無しさんNGNG
なんか知障が沸いてるみたいだな
0197デフォルトの名無しさんNGNG
>>196 ---> >>196
0198ジゴロウNGNG
はじめまして。

質問です。
�@BCB5で、WindowsXPのビジュアルスタイルにする方法はありますか?
�Aあれば、どうすればできますか?
以上のこと教えてください。お願いします。
0199デフォルトの名無しさんNGNG
http://www.microsoft.com/japan/msdn/windows/windowsxp/xptheming.asp
0200デフォルトの名無しさんNGNG
>>195
3 bool GetNum(POINT& rpt);
4 bに近い。boolとvoidとの混同になる。
0201ジゴロウNGNG
>>199
早速ありがとうございます。
関係ないところばかり探していました。
0202デフォルトの名無しさんNGNG
>>200

Thanks !

>>194の人とは違う人っぽい。。。 どっちがいいんだろう。
0203デフォルトの名無しさんNGNG
スレタイに初心者歓迎って書いてたんで覗いてみたら・・。
漏れのような超初心者が来るようなところじゃ無かったよorz
別スレ探してきまつ。(´・ω・`)
0204デフォルトの名無しさんNGNG
>>203
歓迎するよ〜
いらっしゃい〜
0205デフォルトの名無しさんNGNG
ほとんど返信こなくて 全然統計取れない;;;;;;;;;;;;;;;;
0206デフォルトの名無しさんNGNG
そりゃあんな変なノリで聞かれちゃ
ネタにしか思えんし、答える気も失せる


そもそも質問の意図も意味も伝わっとらんしな
0207デフォルトの名無しさんNGNG
回りくどくいってきたんだけど、ようはC++のスタンダードなスタイルがしりたいんですよ
会社にはいって、個性あるプログラムだねぇといわれたくないもので。
0208デフォルトの名無しさんNGNG
>>207
正直見づらい上にバラバラに聞いてるからなぁ‥‥

せめて↓な感じで書けばまだ見やすいんだが‥‥
3. (空白関係なし)
 a:. POINT GetNum();
 b: bool GetNum(int *x, int *y);
0209デフォルトの名無しさんNGNG
コーディング規約 第2条
http://pc5.2ch.net/test/read.cgi/tech/1068752664/l50
C/C++ Coding Style Thread
http://pc5.2ch.net/test/read.cgi/tech/1096687703/l50
C++相談室 part37
http://pc5.2ch.net/test/read.cgi/tech/1098543578/l50

この辺ならそういう話題を結構取り扱っている
けど、コーディングの規則は会社や仕事依頼元に左右され
必ずしも画一的ではない


と、今まで↑のスレ読んできた限りでは、学生風情の漏れはそう判断した
0210デフォルトの名無しさんNGNG
>>209
おお さんきゅ〜〜〜

こんなすれがったのかーーー
まじありがとーー
0211デフォルトの名無しさんNGNG
>>210
おまえさん、会社に入る=就職するつもりならコーディング規約より先に
まともなコミュニケーション能力をつける必要があるぞ。
0212209NGNG
漏れも書き込んだ後にそう思った
オンラインゲームかチャットかの雰囲気そのままここに持ってきた感じだよな
0213デフォルトの名無しさんNGNG
>>212
あんたは、なにいまさらいってるんだよ
ここはオンラインゲームかチャットよりもひどい板だろ
0214デフォルトの名無しさんNGNG
プログラム中の特定の箇所に限って

open("mona/giko", O_RDONLY);

がなぜか 0 を返す・・・。
他とナニが違うから、よりによって 0 を返すのか見当も付かない・・・。

open(2) 関数@Vine Linux and Cygwin でつ。
0215デフォルトの名無しさんNGNG
>>214
オープンハンドル使い切ってたりしない?
0216214NGNG
>>215
エラーなら open() は -1 を返すはずなんですよねえ。

0 という値自体は有効なものなんだが、それは本来は標準入力を表すファイル記述子のはず・・・。
いったいどんな状況に open() がこんな値(0)を返すのか、man とか見ても
さっぱり分からない。
0217デフォルトの名無しさんNGNG
質問よろしいでしょうか。
For next文の実行中で
何かのキーが押された時に、
実行を中止するにはbreak以外の方法はありますか?
breakってあまり使いたくないので…。
よろしくお願いします。
0218デフォルトの名無しさんNGNG
For next文って…BASICか何かと勘違いしてるのか?
それはともかく、好き嫌いは知らないがほかの方法(gotoなど)を
使われても周りは読みにくくて迷惑するんじゃないのか?
0219デフォルトの名無しさんNGNG
longjmp
0220デフォルトの名無しさんNGNG
throw
0221デフォルトの名無しさんNGNG
後藤
0222デフォルトの名無しさんNGNG
exit
0223デフォルトの名無しさんNGNG
>>217
こいつVBの質問を誤爆してると思う。
breakってbreakキーのことじゃないのか?
0224デフォルトの名無しさんNGNG
if(条件式)
{
 while(条件式)
 {
  if(条件式)
  {
   //正常処理
   goto END;
  }
 }
 //異常処理
 return;
}

//正常処理

END:
//必要な後始末

上記の様な感じでgoto文使うのは一般的に問題があるようなgotoの使い方でしょうか?
ちなみに2箇所の正常処理部分は一部処理内容が異なります。
0225デフォルトの名無しさんNGNG
if(!条件式)
{
 //正常処理
}
else
{
 while(条件式)
 {
  if(条件式)
  {
   //正常処理
   break;
  }
 }
 //異常処理
 return;
}

//必要な後始末
0226デフォルトの名無しさんNGNG
おいおい
0227デフォルトの名無しさんNGNG
「一般的」なんて曖昧な物シラネ
宗教問題起こしたいんじゃなければ、好きにしろとしか
0228デフォルトの名無しさんNGNG
whileの中に正常処理(1)を入れているのが変。
正常処理(1)、正常処理(2)、異常処理、後始末をそれぞれ関数にしちゃえばすっきりするだろうし。
0229コピペ推奨NGNG
■ユダヤと朝鮮人の蛮行

○2チャン運営は創価と統一が乗っ取った!....朝鮮宗教派遣の2チャン運営が削除
http://ex5.2ch.net/test/read.cgi/accuse/1096781624/l50

○2チャン運営は、創価と統一の朝鮮人脈に乗っ取られた!....宗教鮮人がスレスト
http://qb5.2ch.net/test/read.cgi/operate/1096699253/l50
0230デフォルトの名無しさんNGNG
if(条件式)
{
 while(条件式)
 {
  if(!条件式)
  {
   //異常処理
   return;
  }
 }
}
//正常処理

0231デフォルトの名無しさんNGNG
このスレで初めて質問させていただきます。
今後もお世話になる確率が非常に高いので宜しくお願いします。

クラスAを用意し、メンバー関数(a,b,c)を3つほど作りました。
派生クラスはありません。

そのメンバ関数aの中で、動的変数を配列で定義したのですが、
b,cで認識してくれません。

これは常識なのでしょうか。
つまらない質問だろうとは思いますが、返答をもらえれば幸いです。
追加で、クラス内で動的変数を定義する為にはどうしたらいいかも教えていただければ幸いです。
0232デフォルトの名無しさんNGNG
>>231
ソースを手短に書き込んでくれ
0233デフォルトの名無しさんNGNG
> 動的変数を配列
動的変数ってなんじゃワリャー
0234デフォルトの名無しさんNGNG
って、まさかと思うがメンバ関数a内の自動変数(ローカル変数)が
メンバ関数b、メンバ関数cで見えないなんて事を言ってるわけじゃないよな?
0235231NGNG
>>234
あぁ・・・まさにその通りでした。
言われて気づきました。
申し訳ないです。クラス以前の問題でしたね。ありがとうございました。
>>232さん、お騒がせしました。

そしてもう一つ問題が出てしまいました。

class A の private の中で、変数を定義し、同時に数値を代入すると
class A{
private:
int aaa=0;
関数でない識別子が純粋関数であると指定されています。とコンパイルエラーになってしまいます。

使い方がおかしいのでしょうか。
0236デフォルトの名無しさんNGNG
メンバ変数の初期化はコンストラクタで。
0237231NGNG
>>236
なるほど、そこでコンストラクタの出番なのですね。
ちょっと知識がつながった気がしました。
ありがとうございました。
0238デフォルトの名無しさんNGNG
・・・
0239デフォルトの名無しさんNGNG
>>238
落ち着け。
ここは初心者歓迎なスレだ。
0240デフォルトの名無しさんNGNG
俺最初は、こういう質問に答えようとここに来たよ。
1スレ読んだ後、質問側に回ることにしたけど。
0241デフォルトの名無しさんNGNG
#include <stdio.h>


int main()
{
int a,b,c;
a=b=0;
c=a+b;
a=b=1;
printf("%d\n" , c);
}
とすると0が表示されます
aとbに1を代入してるから
cは2になるはずなのになんでですか?
0242デフォルトの名無しさんNGNG
処理が上から下に流れるから
0243デフォルトの名無しさんNGNG
>>241
お前の考えだと、a=b=0; とa=b=1; が
矛盾してるというか相反すると思いませんかー
0244デフォルトの名無しさんNGNG
>>242
>>243
レスありがとうございました
なぜかふと、疑問に思ってしまいました
時々、基本中の基本をど忘れすることがありまして
アルツハイマーぎみですw
0245デフォルトの名無しさんNGNG
病院行って脳の検査しる
0246デフォルトの名無しさんNGNG
>>235
int aaa=0;
これは代入でなくて初期化。
そしてクラス定義内で初期化できるのはstaticな整数のみ。
0247デフォルトの名無しさんNGNG
↑訂正
×staticな整数
○staticなconst整数
0248デフォルトの名無しさんNGNG
整数?
0249デフォルトの名無しさんNGNG
>>248
『プログラミング言語C++第3版』 10.4.6.2
「静的な整数の定数メンバは、メンバ宣言に constant-expression 初期設定子を
追加することによって初期設定することもできる。」
0250デフォルトの名無しさんNGNG
同書に「浮動小数点を宣言したくなる誘惑」なんて書かれていますが。
どうしてfloatやdoubleはだめなのですか?
0251 NGNG
gcc34 (GCC) 3.4.0 (Red Hat Linux 3.4.0-1)

実践MySQL4 に書いてある Cクライアントのサンプルコードを入力してコンパイルしてみると

/usr/include/mysql.h:59:21: typelib.h: そのようなファイルやディレクトリはありません

typelib.hというインクルードファイルはどこで提供されているのでしょうか?
mysqlの方にはついてなかったと思うのですが、
一応ディスク内は検索してみましたがありませんでした。
gccの方で標準的に提供しているでしょうか?

0252デフォルトの名無しさんNGNG
auto_ptrについてなんですが、ちょっと気になることがあります。

auto_ptr<int> p1(new int), p2;

p1.release();
や
p2 = p1;
とするとVC6付属のSTLでは所有権のみの移動なのですが
STLPortでは所有権だけでなくp1が保持するポインタもヌルになります。
規格が新しくなってこうなったのだと思いますが
どういう意図でポインタもヌルになるようになったのでしょうか?
0253デフォルトの名無しさんNGNG
>>251
ttp://bugs.mysql.com/bug.php?id=4168

ここによると最新版では修正されているらしい。(これはWin版の記事だけど)
0254217NGNG
お返事遅れて申し訳ありません。
元々VBを使っているので間違えてしまいましたが、
意図を汲んでくださってありがとうございます。
感謝します。

C言語を勉強した中で、
breakやgotoは使ってはいけないような気になっていたのですが
色々なソースを見ているとgotoよりもbreakで抜けてしまったほうが
わかりやすいみたいですね。

longjmpも面白そうですが、初心者なのでbreakを使ってみようと思います。
どうもありがとうございました!!

また何かわからなくなったら教えてくださいー
(ゲームに挑戦中ですw)
0255デフォルトの名無しさんNGNG
void hoge1(int a[]);

main
{
int b[10];
hoge(b);
}
void hoge(int a[])
{
a[1]=1;
}
だと配列b[1]が1に書き換えられてしまうのですが
配列bが関数hoge内で書き換えられないようにhogeに配列bを渡すにはどうすればいいのでしょうか?
0256訂正しますNGNG
void hoge(int a[]);

main
{
int b[10];
hoge(b);
}
void hoge(int a[])
{
a[1]=1;
}
だと配列b[1]が1に書き換えられてしまうのですが
配列bが関数hoge内で書き換えられないようにhogeに配列bを渡すにはどうすればいいのでしょうか?
0257デフォルトの名無しさんNGNG
>>256
void hoge(const int a[])
0258デフォルトの名無しさんNGNG
>>257
別の場所で配列bの内容を書き換えたいのでそれはちょっと・・・



for (i=0; i<10; i++)
  {
b[i] = a[i];
}
hoge内で上のようにコピーするしかないのでしょうか?
変数を関数に渡した時は元の変数が勝手に書き換えられることがなかったのでちょっと不思議です
0259デフォルトの名無しさんNGNG
>>258
C++ならvectorとかのコンテナを使えば可能
0260デフォルトの名無しさんNGNG
>>259
vectorは難しそうなんで>>258の方法で地道にコピーしてみます
0261デフォルトの名無しさんNGNG
>>260
あんまり難しくもないんだけどね
参考までにあなたのやりたいことはこんな風に書ける(それ以外もちょっと修正したけど)
#include <vector>
using namespace std;
void hoge(vector <int> a);
int main ()
{
vector <int> b (10);
hoge(b);
return 0;
}
void hoge(vector <int> a)
{
a[1]=1;
}
0262デフォルトの名無しさんNGNG
>>260
俺もせっかく書いたので・・・

#include <vector> // ← STLのvectorを使うため

void hoge(std::vector<int> a);

int main()
{
  std::vector<int> b(10); // ←要素数10の配列だと思ってもらっていい
  hoge(b);
}

void hoge(std::vector<int> a) // ←ここの配列aは配列bのコピー
{
  a[1]=1; // ← コピーなので配列aの中身を書き換えても配列bの中身は書き換わらない
}

書き換えたい場合は参照渡しにすればOK
0263デフォルトの名無しさんNGNG
>>261
>>262
ご説明ありがとうございます
早速試してみます
0264デフォルトの名無しさんNGNG
class/structのstaticメンバの質問です。
--- aaa.hpp ---
struct AAA
{
 static const int table_aaa[];
 void a( )
 {
  //ここでtable_aaa[]にアクセス
 }
};
--- aaa.cpp ---
const int AAA::table_aaa[]=
{
 //色々
};
--- main.cpp ---
int main( )
{
 AAA aaa;
 aaa.a( ); // ※
}

※の部分に関してですが、
MinGWでは、AAA のstaticメンバ(table_aaa[])に対しての
undefined reference が発生しますが、
VCToolkit2003では、通ります。

どちらが正しいのでしょうか?
0265264NGNG
makefileを間違えていました。

申し訳ありませんでした。
0266デフォルトの名無しさんNGNG
>>259-262

>変数を関数に渡した時は元の変数が勝手に書き換えられることがなかったのでちょっと不思議です
>vectorは難しそうなんで>>258の方法で地道にコピーしてみます

こんなこと言ってる奴に教えても無駄だと思われ
0267デフォルトの名無しさんNGNG
ソースファイルを分割した後に実行したら
hoge.exeの0x00401009でハンドルされていない例外が発生しました
0xc0000005:場所0x00030bcに書き込み中にアクセス違反が発生しました
と言うエラーが出ました
分割するのに必要なとこだけしか変更してないのになんででしょうか?
0268デフォルトの名無しさんNGNG
エスパーさん出番ですよ。
0269デフォルトの名無しさんNGNG
♪「好きよ」と言い出せないうちに、貴方のロッカー奪ったLove-letter
0270デフォルトの名無しさんNGNG
依頼人は嘘をつく
0271デフォルトの名無しさんNGNG
>>267
ワトソン博士のログファイルなんかから
場所と原因を特定してみるのも面白いぞ。
練習だと思ってやってみ。
0272デフォルトの名無しさんNGNG
ワトソン、インスコ直後に機能切ってるよ…('A`)
0273デフォルトの名無しさんNGNG
#define DEBUG TRUE
は同じファイル内だけで有効なのか・・・
ファイルごとにオンオフすんのめんどくさいな
0274デフォルトの名無しさんNGNG
普通、コンパイラにはコマンドラインオプションとしてマクロ定義が可能なんで、
IDEのプロジェクト設定なりmakeいじるなりすれば全ファイルのコンパイル時にマクロ定義できる。
0275デフォルトの名無しさんNGNG
そういうときは全てのファイルでインクルードするヘッダに#defineを書けばいい。
0276デフォルトの名無しさんNGNG
ソース内に埋めると消し忘れる原因になるからIDEならビルドごとに設定、
Makefileならターゲットごとに設定するのが基本。
0277デフォルトの名無しさんNGNG
(;´Д`)ウウ・・C++builder6を購入してやりだしたのはいいのですがイキナリ詰まりました。
とりあえず自分で関数を作ってみようと下記のようにしたのですが
どうやったらこのエラーを修正できるでしょうか。。

[リンカ エラー] 外部シンボル 'TForm1::message()' が未解決(C:\BUILDER\PRACTICE\1106\UNIT1.OBJ が参照)

ソースは下記のようにしました。
ヘッダふぁいる。
class TForm1 : public TForm
{
__published:// IDE 管理のコンポーネント
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private:// ユーザー宣言
public:// ユーザー宣言
__fastcall TForm1(TComponent* Owner);
void message();
};
cppふぁいる。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
message();
}
void message()
{
ShowMessage("通ったよ");
}


0278デフォルトの名無しさんNGNG
void message()
→void TForm1::message()
0279デフォルトの名無しさんNGNG
むしろこっちの薬缶

class TForm1 : public TForm
{
__published:// IDE 管理のコンポーネント
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private:// ユーザー宣言
public:// ユーザー宣言
__fastcall TForm1(TComponent* Owner);
};

void message();
0280276NGNG
>>278さん
(・∀・)ありがとーございます。

クラスの中に入っているときには「クラス名::関数名」ってやればいいんですね。

逆に言うとTFormのクラスの外に関数のプロトタイプ宣言を出してやれば。
関数の名前にTForm::ってつけなくてもいいみたいですね。。

(・∀・)一つ進化した気がする。
0281デフォルトの名無しさんNGNG
>>280
とりあえずC++の入門書読みなさい。
0282277NGNG
・・・(;´Д`)ウウッ… 277だった。

>>279さん
(・∀・)ありがとーございます。

後なんとなく、クラスにおけるpublicとかprivateとかイメージがつかめてきた気が。。
↑
今まで無茶苦茶曖昧だった。。
0283デフォルトの名無しさんNGNG
3ヶ月くらい前に、とあるスレでC++を学ぶならCをある程度理解してから、と言われました。
とりあえず猫でも分かるシリーズ3冊読みました。
そろそろC++やりたいんですけど、いい入門書あれば教えてください。
0284デフォルトの名無しさんNGNG
Cをやってしまったのならば最初からバイブルでもいいんじゃないか?
ttp://www.amazon.co.jp/exec/obidos/ASIN/475611895X/
0285デフォルトの名無しさんNGNG
>>283
似たような質問ばかり見るんだけど、ちゃんと適当なスレを探している?
さんざん既出で、もうその質問にはうんざりなんだけど。
0286デフォルトの名無しさんNGNG
Windows 2000 の環境下で作成したC/C++のアプリケーションを
Windows XP や Windows 2003 Server の環境下で実行することはできますか?

簡単なテキストファイルを編集したり、ファイルを検索したりコピーしたりする
アプリケーションを作ろうと考えています。
0287デフォルトの名無しさんNGNG
>>286
普通はOK
0288デフォルトの名無しさんNGNG
>>287
サンキューです。
Cの経験はほとんどないですが、勉強がてら作ってみようと思います。
0289デフォルトの名無しさんNGNG
>>283
本を何冊も読むより、自分でコードを書いた経験がはるかに大事だよ。
猫3冊読んだだけじゃ、経験値は0みたいなものだな。

↓C++の定番入門書。
http://www.amazon.co.jp/exec/obidos/ASIN/489471115X/
http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/
ダイテル本は全3冊

どちらかを勉強したら、自分でコードをガシガシ書いて経験値を上げた後>>284を。
0290デフォルトの名無しさんNGNG
>>250
誰かエロイ人
0291デフォルトの名無しさんNGNG
bmpファイルをpgm形式に変換するプログラムを作るのに参考になるサイトありますか?
0292RubykitchNGNG
www.wotsit.org
sf.net
0293デフォルトの名無しさんNGNG
>>291
PGM作る関数。
前に宿題スレ作った分の残りもの。
void save_pgm( char* filename, unsigned char** image, int xsize, int ysize ) {
FILE* fp;
int x, y;

fp = fopen( filename, "wb" );

fprintf( fp, "P5\n" );
fprintf( fp, "%d %d\n", xsize, ysize );
fprintf( fp, "%d\n", 255 );

for ( y = 0; y < ysize; y++ ){
for ( x = 0; x < xsize; x++ ){
fputc( image[y][x], fp );
}
}

fclose(fp);
}
0294デフォルトの名無しさんNGNG
>>290
そこ誤訳があるところ。
禿の文意はおそらく(かなりの意訳)
「クラス宣言内でシンボル定数が必要なら列挙を使うようにしろ。
そうすれば変数や浮動少数点数をクラス宣言内で初期化しようとする
ミスは防げる。」
0295デフォルトの名無しさんNGNG
2変数方程式を入力する関数どうすればいいですか?
2xyとか
0296デフォルトの名無しさんNGNG
>>295
// こういうこと?
double func2xy(double x, double y) {return 2 * x * y;}
0297デフォルトの名無しさんNGNG
方程式を入力する関数って言う意味が分からない。
0298デフォルトの名無しさんNGNG
>>294
結局整数しばりは禿様がなんらかの思想の元きめたことなのですかね
特に深い理由はないのかな。どうもです。
0299295NGNG
2xy限定じゃなくて任意に式を入力したいんだけど
0300デフォルトの名無しさんNGNG
つまり、2変数方程式を解きたいんですか?
まず普通の2*3^4とかを入力して、結果を表示するプログラムを作ってみれば良いのでは?
0301デフォルトの名無しさんNGNG
本当に聞きたいのならもう少し具体的にきちんと説明
0302デフォルトの名無しさんNGNG
プログラム初心者なら歓迎だが、
意思伝達の初心者だと (このスレを利用するのは) 難しい
0303デフォルトの名無しさんNGNG
コンパイルしてできた、実行ファイルを
バイナリエディタとかで開くと、使ったコンパイラの情報が入ってますよね?
それをなくしたいんですけど、どうやったら良いですか?
0304デフォルトの名無しさんNGNG
2ちゃんねるの悪体質は改善せねばなりません。
0305デフォルトの名無しさんNGNG
304=295
0306デフォルトの名無しさんNGNG
>>303
ハンドアセンブルすればいいよ
0307デフォルトの名無しさんNGNG
305=304=295
0308デフォルトの名無しさんNGNG
>>303
空白か何かで埋める。
0309デフォルトの名無しさんNGNG
>>303
どんな情報が入ってるの?
シリアルナンバー、使用者の名前、とかの情報も入ってるの?
0310デフォルトの名無しさんNGNG
>>309
適当にバイナリエディタで見てみたら?
そんなたいしたこと書いて無いよ
0311デフォルトの名無しさんNGNG
>>299
式のパースをしたいならパーサを書け。lex、yaccなどについて調べよ。
0312デフォルトの名無しさんNGNG
>>303
gcc -S hoge.c
で出てきたアセンブリ言語のソースで気になるところをチェックして
アセンブラにかければよろし。
0313デフォルトの名無しさんNGNG
>>306
Cなんだから、ハンドコンパイルって言おうよ。
0314デフォルトの名無しさんNGNG
>>312
ライブラリの中とかに情報が入ってたりするよ。
0315デフォルトの名無しさんNGNG
VC6なのですが、F5の実行では出ないで、
Ctrl+F5の実行だと必ず再現するバグって何が原因か心当たりないでしょうか。
いずれもDebugモードです。

「Debugモードでは出ないで、Releaseモードでは出るエラー」だと
初期化のし忘れなどが多いですが、F5とCtrl+F5で挙動が違うのは初めてで、お手上げです。
0316デフォルトの名無しさんNGNG
>>315
まずその「バグ」の内容を書こうとは思わんのか?
0317デフォルトの名無しさんNGNG
>>316
それがこみ入ってまして、バッファがおかしいのか、
描画ライブラリの振る舞いなのか、フラグのつけ忘れか、初期化周りか…。

なので有名な「Releaseビルド時にのみ出るバグ」、みたいな常套チェック項目が
無いかなとお尋ねした次第。まぁ幾らぐぐっても無いみたいなので、総ざらいしてきます。
0318デフォルトの名無しさんNGNG
>>317
初期カレントディレクトリが違ったような気がした。
0319デフォルトの名無しさんNGNG
>>317
Debugモードは余分にメモリを確保する。
バッファ辺り調べてみるといいかも。
0320デフォルトの名無しさんNGNG
ちげーだろ
0321デフォルトの名無しさんNGNG
>>317
F5なら設定でコマンドラインの指定ができる。そこは大丈夫?
0322デフォルトの名無しさんNGNG
>>318-321
皆さんレスありがとうございます
まだ取れてないのですが、その線で洗い直してみます。

なにせデバッガで追えないので、手がかりは本当に助かります
0323デフォルトの名無しさんNGNG
(g_diMouseState.rgbButtons[0] & 0x80) ? MState.lButton = true : MState.lButton = false;
これはどういう文なんでしょうか?
?なんていう命令は見たことないのでこの文の意味を教えてください
0324デフォルトの名無しさんNGNG
>>323
http://www.google.co.jp/search?hl=ja&q=%E4%B8%89%E9%A0%85%E6%BC%94%E7%AE%97%E5%AD%90&lr=lang_ja
0325デフォルトの名無しさんNGNG
>>323
それは三項演算子というもので、もしそれがコンパイルできるとするなら、
if (g_diMouseState.rgbButton[0] & 0x80) {
  MState.lButton = ture;
} else {
  MState.lButton = false;
}
と等価。
が、普通は?の後ろに式なんか書かない(書けない?)し、下の書き方の方が普通。
MState.lButton = (g_diMouseState.rgbButton[0] & 0x80) != 0;
0326デフォルトの名無しさんNGNG
>>324
>>325
レスありがとうございます
おかげさまで解決しました
0327デフォルトの名無しさんNGNG
> 普通は?の後ろに式なんか書かない(書けない?)

いや、そこは式だよ。
0328デフォルトの名無しさんNGNG
>>327
式じゃないよ
0329デフォルトの名無しさんNGNG
>>328
エクスプレッションだよ
0330328NGNG
あー、ちょっと省略しすぎかな。そこにかけるのはleft valueだけ
0331デフォルトの名無しさんNGNG
>>329
エクスプレッションって式だよ。
0332デフォルトの名無しさんNGNG
>>331
しってるよ

>>330
なにもかもまちがっている
0333デフォルトの名無しさんNGNG
なに?こいつ
0334デフォルトの名無しさんNGNG
「式」って何ですか?
0335デフォルトの名無しさんNGNG
コレだよ、コレ。
http://www-ccs.ucsd.edu/c/express.html
0336デフォルトの名無しさんNGNG
つまり、説明できないってことですね
0337デフォルトの名無しさんNGNG
>>330
なにが省略だ。プッ
left value?プッ
0338デフォルトの名無しさんNGNG
学校池
0339328NGNG
あー、なんか俺激しく間違ってるみたいだなorz
いろいろ調べてみるよ。
0340デフォルトの名無しさんNGNG
初心者向けには、
カッコで囲めるものは全部文法上の「式」である
ってことでいいかい?
0341デフォルトの名無しさんNGNG
いいよ。
0342デフォルトの名無しさんNGNG
(display "Hello 式!")
0343デフォルトの名無しさんNGNG
if( didod[ i ].dwData & 0x80 )
_tcscat( strNewText, TEXT("U ") );

これの条件式の意味を教えてください
&が2個続いてるのしか見たことないので…
0344デフォルトの名無しさんNGNG
ビット演算のAND
0345デフォルトの名無しさんNGNG
マウスの押されていたボタンが放されたことを検出するにはどうすればいいのでしょうか?
0346345NGNG
マウスがドラッグされてるのを検出したいんです
0347デフォルトの名無しさんNGNG
>>345
環境は? 環境によってかなり異なるので明記されたし。
0348345NGNG
>>347
windowsXPでVC.netです
0349デフォルトの名無しさんNGNG
SetCapture
0350デフォルトの名無しさんNGNG
>>349
早速しらべてみます
ありがとうございました
0351デフォルトの名無しさんNGNG
typedefの構造体は普通の構造体とどう違うのでしょうか?
0352デフォルトの名無しさんNGNG
>>351
構造体変数を宣言するときにstructを付ける必要がなくなる。
0353デフォルトの名無しさんNGNG
>>352
なるほど、解決しました
ご返答ありがとうございました
0354デフォルトの名無しさんNGNG
>>351
typedefの構造体なんて物はない。
構造体にtypedefで型名をつけることはできるが。
即ち、次はいずれも有効。

/* 無名の構造体 */
struct {
int foo;
double bar;
} st;

/* タグ名つき構造体 */
struct foo {
int foo;
double bar;
};
struct foo st;

/* 無名の構造体に型名を宣言 */
typedef struct {
int foo;
double bar;
} st_t;
st_t st;

>352は必ずしも正解ではないので注意。
0355デフォルトの名無しさんNGNG
typedef struct が意味を持つのは  C だけ。
C++ では付けても付けなくても違いは無い。
0356デフォルトの名無しさんNGNG
>>355
C99でも付けなくていいんじゃなかったっけ?
うろおぼえなので違うかもしんないけど
0357デフォルトの名無しさんNGNG
const RECT a;
a=0;
a=0;
a=0;
a=0;
としてもエラーが出ます
aの座標を初期設定する方法を教えてください
0358Ruby!!!!!!NGNG
いろいろ死ね」「
0359デフォルトの名無しさんNGNG
const RECT a;
a.left=0;
a.top=0;
a.right=0;
a.bottom=0;

でした訂正します
0360デフォルトの名無しさんNGNG
{0, 0, 0, 0}
0361デフォルトの名無しさんNGNG
それがWindowsのRECT構造体のことであるとするならば、
const RECT a = {left, top, right, bottom};となる。constと指定して
いる以上は初期化以降変更できないことは分かっているんだろうな。
0362デフォルトの名無しさんNGNG
>>356
ダメのようだ。
0363デフォルトの名無しさんNGNG
const RECT a = { 0 };
0364デフォルトの名無しさんNGNG
また少し訂正を加えました
const RECT *a={0, 0, 0, 0};
これでも
error C2078: 初期化子の数が多すぎます。
と言われます
0365デフォルトの名無しさんNGNG
なんだお前は。
0366デフォルトの名無しさんNGNG
後から色々訂正するなよ。
それではポインタに対して配列の初期化子で初期化しようと
しているのだから、文句を言われて当然だ。君はポインタに
ついて理解がない。勉強し直しなさい。
もしWindows APIにRECTへのポインタを渡したいという意図で
あるならば、const RECT a = {0, 0, 0, 0};の形式で初期化した後
&aを渡しなさい。とエスパーっぽく語ってみる。
0367デフォルトの名無しさんNGNG
BOOL ClipCursor(
CONST RECT *lpRect // 画面の座標
);
この関数に渡すための
CONST RECT *lpRect // 画面の座標
を設定したいのです
0368デフォルトの名無しさんNGNG
怖いね。
0369デフォルトの名無しさんNGNG
>>366
できました
ありがとうございました
0370366NGNG
ていうか引数の型がconst RECT*として指定されている分には
渡す側はconst指定しなくていいじゃん
0371デフォルトの名無しさんNGNG
Cの理解が不十分にもかかわらずWindowプログラムを始めたばっかりに
挫折していった奴を何人も知ってる。
>>369もその一人になるだろう・・・
0372デフォルトの名無しさんNGNG
const RECT rc = {1, 2, 3, 4};
ClipCursor(&rc);
あるいは
RECT rc;
rc.left = 1;
rc.top = 2;
rc.right = 3;
rc.bottom = 4;
ClipCursor(&rc);

BOOL ClipCursor(CONST RECT *lpRect);
この場合のCONSTは関数内で変数の中身を書き換えないことを意味するのでrcにconstはなくても良い
0373デフォルトの名無しさんNGNG
>>370
>>372
ご教授有り難うございました
とても参考になります
>>371
そうならないようにがんばりたいと思います
0374デフォルトの名無しさんNGNG
ちなみにC99の複合リテラルを使うとClipCursor(&(RECT){1, 2, 3, 4});
0375デフォルトの名無しさんNGNG
>>373
そうならないためにも基礎を飛ばさずC言語からきちんと勉強しろ
0376デフォルトの名無しさんNGNG
C以前の問題だと思うんだが。
0377デフォルトの名無しさんNGNG
ΩΩ Ω<な、何だってー!?
0378デフォルトの名無しさんNGNG
え?僕の好みですか?やっぱ顔がかわいい子がtypedefね
0379デフォルトの名無しさんNGNG
typedefが流行っていますな。
0380デフォルトの名無しさんNGNG
>>373
もうそうなってんだよ
0381デフォルトの名無しさんNGNG
>>371
朝田さんが来てる
0382デフォルトの名無しさんNGNG
struct A
{
int p : 10;
};
この「: 10」ってのはなんですか?
0383デフォルトの名無しさんNGNG
>>382
ビットフィールド
pに10ビット割り当てられる。
0384デフォルトの名無しさんNGNG
int array[] = { 1, 2, 3 };

arrayがメンバ変数の場合でも、上記の様な
要素数を省略した配列を初期化をする方法はあるのでしょうか
0385デフォルトの名無しさんNGNG
>>383
どうもありがとう御座います
0386デフォルトの名無しさんNGNG
>>384
arrayがstaticメンバ変数なら可能だけど
0387デフォルトの名無しさんNGNG
>>386
ありがとうございます。やはり静的じゃないと駄目ですか。
大人しく別に用意してmemcpyでも使っておきます。
0388デフォルトの名無しさんNGNG
>>387
君にとってconstructは何?
0389デフォルトの名無しさんNGNG
char *cpy_buff[256];//社員ID格納用ポインタ配列バッファ
char *cpy[258];
char buff[256];//社員データ読み込みバッファ用
int =i;
i=0;

while(fgets(buff,sizeof(buff),fp)!=NULL)
{
cpy_buff[i]=strtok(buff,",");
strcpy(cpy[i], cpy_buff[i]);
i++;
}

カンマ区切りのデータを一行読み込み
最初のカンマで区切りまでの文字列を
配列に代入したいと思うのですが
上記ソースで行うと
コンパイルは通るのですが
以下の文字列のコピーでエラーとなります。
strcpy(cpy[i], cpy_buff[i]);

回避方法あります?
0390デフォルトの名無しさんNGNG
>>389
cpy[i]はちゃんとメモリ確保してある?
それから、strtok()が返すのは常にbuffの中だからcpy_buffに格納する意味がないよ。
文字列処理とポインタについて、勉強しなおすことをお勧めしておく。
0391デフォルトの名無しさんNGNG
>>389
cpyの中身はどこへ行った?
strcpyは謎アドレスには書けないと仰られております。
0392デフォルトの名無しさんNGNG
#include <stdio.h>
#include <windows.h>// WindowsAPIを使用可能にする
#include <windowsx.h>

struct c
{
int b;
}a,*d;

void e(struct d f);

int main()
{
struct c g[10];
g[1].b=0;
e(&g[1]);
printf("%d\n" ,g[1].b );
}
void e (struct d f)
{
f->b=777;
}
だと
error C2027: 認識できない型 'd' が使われています。
error C2227: '->b' : 左側がクラス、構造体、共用体へのポインタではありません。
error C2664: 'e' : 1 番目の引数を 'c *__w64 ' から 'd' に変換できません。
というエラーが出てきます
どうしたらいいのでしょうか
ポインターを勉強中なのでお手柔らかにお願いします
0393デフォルトの名無しさんNGNG
struct dじゃなくてstruct cだろ。
0394デフォルトの名無しさんNGNG
void e(struct d f) → void e(struct c f)
単純なtypo
0395デフォルトの名無しさんNGNG
>>392
dは型名じゃない。aも。ポインタの問題じゃない。
0396デフォルトの名無しさんNGNG
#include <stdio.h>
#include <windows.h>// WindowsAPIを使用可能にする
#include <windowsx.h>

typedef struct c
{
int b;
}a,*d;

void e(d f);

int main()
{
struct c g[10];
g[1].b=0;
e(&g[1]);
printf("%d\n" ,g[1].b );
}
void e (d f)
{
f->b=777;
}
これだとちゃんとできるんですが>>392からtypedef取ってstructを付け足したらエラーが出たので
不思議に思ってます
0397デフォルトの名無しさんNGNG
>>396
typedef struct c {} a, *d;
は、struct cをa という型に、struct c * をdという型に定義している。
struct c {} a, *d;
では、struct c と言う型のaと、struct c *と言う型のdを定義しているだけだ。
0398デフォルトの名無しさんNGNG
>>397
なるほど!!
目から鱗が落ちました
これですっきり解決しました
ありがとうございました
0399デフォルトの名無しさんNGNG
SourceForgeにあるDev-C++って使ってる香具師いる?
ttp://sourceforge.net/projects/dev-cpp/
0400デフォルトの名無しさんNGNG
C++でクラスのメンバに関数ポインタ用の変数を用意して
現在の状態からswitch使って呼ぶ関数を決めるのではなくて
状態の変化があった時にその変数に関数ポインタを代入しておいて
それを呼ぶ形にしたいと思ったのですが
代入している所で
void (_cdecl クラス名::*)から(void) void (_cdecl *)(void)に変換することは〜
と言われてコンパイルが通りません
(呼び出し規約というのは調べたらすぐ出てきたので_cdeclにしました)
クラスのメンバ関数はポインタで扱えないんでしょうか?
0401デフォルトの名無しさんNGNG
メンバ関数へのポインタはメンバ関数ポインタにしか代入できない。
0402デフォルトの名無しさんNGNG
非常に初歩的な質問で申し訳ありませんが
double x = 3.14; x>>3; と記述したところ
エラー c41.c 15: doubleの不正な使用(関数main) というエラーが出ました
シフト演算子は浮動小数には使用できないのですか?
0403デフォルトの名無しさんNGNG
float、double、ポインタには使用できない
0404400NGNG
>>401
ちゃんとそういうものがあったのですね
勉強に使っている本やサイトになかったもので
ありがとうございました
0405デフォルトの名無しさんNGNG
>>402
何をやりたいのかわからない。
0406デフォルトの名無しさんNGNG
>>400
「関数ポインタ用の変数」の型をメンバ関数へのポインタにするべし。
そのエラーメッセージから察するに、現状はメンバではない関数へのポインタになってる。
構文キモイから覚悟して。
0407デフォルトの名無しさんNGNG
そこで、関数オブジェクトですよ。
0408デフォルトの名無しさんNGNG
そふぉで、ふぁんすうふぉふぅじぇふとでひゅよ。(おでん食いながら)
0409デフォルトの名無しさんNGNG
便乗して関数ポインタについてお聞きしたいのですが、関数ポインタはどんな状況で使うべきなのでしょうか?
単にswitchの代わりに使うのではあまり意味がなさそうですし、あとは引数として使うくらいしか知らないのですが
有効な使い方を教えていただけないでしょうか>
0410デフォルトの名無しさんNGNG
WindowClass を C++ の class で作って window procedure に
その class の member function を登録したいとき
call back function としてメンバ関数ポインタを使う
0411デフォルトの名無しさんNGNG
>>409
C++で仮想関数を使いたい場面をCでがんばって実装するのに使う。
0412デフォルトの名無しさんNGNG
POINT a;
と
struct s
{
int x;
int y;
}a;
は何が異なるんでしょうか?
0413デフォルトの名無しさんNGNG
POINTの定義次第じゃないか?
0414デフォルトの名無しさんNGNG
>>413
POINTは定義しないでも使えるんですけど
なんでですか?
0415デフォルトの名無しさんNGNG
定義してるヘッダをインクルードしてるんだろ
0416デフォルトの名無しさんNGNG
>>409
タスクシステム使うとき
0417デフォルトの名無しさんNGNG
なかなか思い通りにいかないな
つぎからつぎへと細かいバグが出てくる
同じような操作の繰り返しでつかれました
0418デフォルトの名無しさんNGNG
製品クオリティーにはほど遠いな…
0419デフォルトの名無しさんNGNG
1,御kjの,女fだ,jk所
2,f打御,kもf,qjf朝
:
のように、半角全角が混じった適当なCSVファイルがあります。
それをfgetsで一行ずつ文字列配列に入れているつもりなのですが、
適当な行を取り出して中身をのぞいてみると「1,御kjの,女fだ,jk所・」
のように行末に余計な文字が出て来る場合があります。
どこがおかしいか教えてください。よろしくお願いします。
/////
char list[128][128];
int i;
for (i=0;i>128;i++)list[i][0]='\0';//初期化のつもり。正しい?
fp = fopen("test.csv","r");
i=0;
while (fgets(list[i],256,fp) != NULL){
printf("%s",list[i]);
i++;
}
fclose(fp);
0420デフォルトの名無しさんNGNG
× i>128
○ i<128
0421デフォルトの名無しさんNGNG
>>420
すいません、それはここにUPするため体裁を整えた際のミスです。
ソースではi<128となっております。
0422デフォルトの名無しさんNGNG
>>419
改行コードじゃ?
0423デフォルトの名無しさんNGNG
>>422
ありがとうございます。試してみたんですが、
そうかもしれません。
CSVを一行だけのファイルにして改行のない状態にしたら消えました。
そうだとしたら、本番で使うファイルは複数行あるものなので、
その改行コードというのを取り除きたいのですが
どうやって取り除けばよいのでしょうか…
0424デフォルトの名無しさんNGNG
>>423
strlenとかで長さ計って改行コードを\0で上書きするとか?

それはそうと128バイトのバッファに
fgets(list[i],256,fp)
していいの?
0425409NGNG
皆さんどうもありがとうございます m(_ _)m
それにしても、意外と関数ポインタを使う状況って限られているみたいですね
0426419NGNG
>>424
ありがとうございます。↓のような物をWhileの中に入れてみました。
ファイルの最後の行とかには改行がないかもしれないので、
改行がある場合のみ置き換えるようにしてみようと思ったのですが
上手く置き換わらず、そのままの状態で出力されます。
度々申し訳ないのですが、何が悪いのでしょうか。。。

if(list[i][strlen(list[i])] == '\r\n'){
list[i][strlen(list[i])-1]='\0';
}
0427デフォルトの名無しさんNGNG
>>426
char * p = strchr(list[i], '\0');
if (p > list[i] && p[-1] == '\n') {
p[-1] = '\0';
}
/* 或いは */
size_t l = strlen(list[i]);
if (l > 0 && list[i][l - 1] == '\n') {
list[i][l - 1] = '\0';
}
/* 或いは */
char * p = strrchr(list[i], '\n');
if (p) {
*p = '\0';
}
いずれにしても、'\r\n'は間違い。
0428419NGNG
>>427
いろいろありがとうございます。わざわざすいません。
最後の奴が分かりやすかったので使ってみたら上手くいきました。
ところで
if(list[i][strlen(list[i])] == '\n'){
list[i][strlen(list[i])-1]='\0';
}
としてもダメだったんですが、これがいけない理由が分かりません。
理屈を言葉で理解したいのですが、これはどういったことなのでしょうか。
0429デフォルトの名無しさんNGNG
>>428
strlenって何する関数か調べれば分かるよ
0430デフォルトの名無しさんNGNG
>>428
char型1個に\rと\nが両方入るの?
>>429
?
0431デフォルトの名無しさんNGNG
ごめん426の方のコード見てた
428は無視して
0432431NGNG
×428
○430
0433デフォルトの名無しさんNGNG
つまり、430-432はスルーと言うことで。
0434デフォルトの名無しさんNGNG
ドラグでマウスの左ボタン押してから離すまでという条件文はどうやればいいのでしょうか?
WM_LBUTTONUP
WM_MOUSEMOVE
WM_LBUTTONDOWN
上の3個のメッセージ使ってドラッグを表現できないでしょうか?
0435434NGNG
解決しました
0436デフォルトの名無しさんNGNG
( ゚д゚)ポカーン
0437419NGNG
力尽きました。限界であります。
VC6++のプロジェクトごと入ってますのでそのままビルドできると思います。
超単純なダイアログベースアプリでの
ファイル読み込み→リストビューに表示、という簡単なテストプログラムです。
実はこういったものを作っていたのですが、もう何がなにやらわけが分からないです。
どなたか助けていただけると助かります、、分からない事はソースにコメントしてあります。。
ttp://gamdev.org/up/img/1835.zip
0438419NGNG
ちなみにMFCとか使ってません。
リソースエディタで作ってDialogBoxしてあるだけの超単純なやつです。
ですがなににしろAPIとかの間違いじゃなくて
初歩的なCの問題のような気がします…
0439デフォルトの名無しさんNGNG
ウィルスが検出されたけど?
0440デフォルトの名無しさんNGNG
>>438
行を分解するのに自前でやるからバグに気付かない罠。
sscanf()でばらしてみ。strtok()でもいいけど。
#ヒント:行内最後のセルには','はつかない。
0441デフォルトの名無しさんNGNG
class CClassA;

typedef struct _tagStructB
{
CClassA::enumC en;
} StructB;

class CClassA
{
public:
enum enumC
{
ok,
err
};

StructB m_B;
};

と言う事をしたいのですが、どうしてもうまくいきません。

error C2027: 認識できない型 'CClassA' が使われています。

どうか、お慈悲を…
0442デフォルトの名無しさんNGNG
>>441
これくらいがせいぜいか

struct CClassA_Base
{
enum enumC
{
ok,
err
};
};

struct StructB
{
CClassA_Base::enumC en;
};

class CClassA: public CClassA_Base
{
public:
StructB m_B;
};
0443デフォルトの名無しさんNGNG
>>441
あとは

class StructB;

class CClassA
{
public:
enum enumC
{
ok,
err
};

StructB *m_B;
};

struct StructB
{
CClassA::enumC en;
};
0444441NGNG
>>442-443 THX!

スマートな書き方はないんですね…
とりあえず、意味合いは変わってきますが、こんな感じで逃げようかと思います。

class CClassA
{
public:
enum enumC
{
ok,
err
};

typedef struct _tagStructB
{
CClassA::enumC en;
} StructB;

StructB m_B;
};
0445デフォルトの名無しさんNGNG
>>444
ちなみにC++では構造体もクラス同様、変数宣言などのときにstructはなくても平気だからtypedefする必要はない。
0446444NGNG
この癖はもう抜けません…
0447デフォルトの名無しさんNGNG
typoの元だから抜いとけよ。
0448デフォルトの名無しさんNGNG
1380791345などの、Long型の値を、文字列に変換するには
どうしたら良いでしょうか?

gccコンパイラ使ってます。
0449デフォルトの名無しさんNGNG
itoa
0450デフォルトの名無しさんNGNG
sprintf
0451デフォルトの名無しさんNGNG
boost::lexical_cast
0452デフォルトの名無しさんNGNG
可変引数の関数を作っているのですが

bool function(int a, int b, ... );

この場合、va_startに渡す第2引数はbでいいの?
0453デフォルトの名無しさんNGNG
ok
0454デフォルトの名無しさんNGNG
初心者な質問ですみません。
C言語で標準関数を使用してBASICの様にLine見たいな感じで描画する事は可能なんでしょうか?
線や円を色などを指定して描画したいんですが。
もし不可能であればそのような事を実現するのに適したライブラリ等、お勧めな物はありますか?
0455454 NGNG
書き忘れましたが、使用環境はSolaris9+gcc2.95.3
もしくは Linux(カーネル3.3.32.4)+gcc3.3.3
できるだけunix+gccで実現したいんですが、windowsのほうが手っ取り早いというならば
WindowsXP+VisualC++6.0辺りでも構いません。
0456デフォルトの名無しさんNGNG
質問します。
Visual Studio .net なんですが、
それにDirectXを関連付けてインストールするにはどうしたらいいんでしょうか?
0457大原ゆきNGNG
>>454
よく学科の初級演習でちょっとしたシミュレーション結果などを学生に
表示させるのにSGL(Simple Graphics Library)というグラフィックス
ライブラリが使われたりすることがあるそうです。
その名の通りごく単純な機能しか持っていないので、習得が短時間でできます。
グラフィックスに重点を置かないようなプログラムの描画テストなどであれば、
ある程度使いものになるでしょう。
http://www.rzuser.uni-heidelberg.de/~demscher/public/sgl/
0458419NGNG
>>439
マジですか?
からかいだったら氏ね。
>>440
こんな便利なものがあったとは…
なんとかsscanfを使って解決できました。
ありがとうございました。
0459デフォルトの名無しさんNGNG
ちと環境依存OKに甘えさせて下さい
最近のIDEだと、iteratorやクラスメンバなんかでも
入力補助(インテリセンス、メンバ表示)が効くのでしょうか?

もう5年近くVC6を使っていて、未だ買い換える気にもならないので
ちょっと物欲を刺激してみようかと
0460デフォルトの名無しさんNGNG
>459
普通に効きますよ
0461デフォルトの名無しさんNGNG
>>460
サンクスです!
あーやっぱりそろそろ買い換えよう…便利だろうなぁ
0462デフォルトの名無しさんNGNG
アプリケーションがやり取りしているデータを(たとえばIE)
読み取りたいんですが全く方法がわかりません。
どなたかヒント頂けないでしょうか?
言語はC++を使おうと思っています。
よろしくお願いします。
0463デフォルトの名無しさんNGNG
意味不明。
クリップボード、プロクシもどき、クッキー、キャッシュ、メッセージ、ちょっと考えるだけでこんなに候補がある。
0464462NGNG
メッセージの部類に入ると思います。
たとえばサーバにURL送る時は(おそらくURL情報、送信元IP、ブラウザ情報・・・)
IEにかかわらずたとえばアプリがやり取りしてるデータ(メッセージ?)に
アクセスしたいです。
0465デフォルトの名無しさんNGNG
>>464
アプリケーション間やOSとやりとりするメッセージと
IEからサーバーに送られるリクエストパケットは別物
アクセス方法も違う。
何をしたいか明確にしないと答えようがない
0466デフォルトの名無しさんNGNG
>>464
その前にWindowsがどういう仕組みになっているか勉強した方がいいと思います
0467462NGNG
>>465
勉強不足でうまく伝わらないようです・・・
アプリがやり取りしてるデータと言うのを具体的に明記すると
Windows上で動く一つのオンラインゲームがあり
そのオンラインゲームがサーバとやり取りしているデータを読み取りたいです。
オンラインゲームにかかわらずネットワーク経由でデータをやり取りしているアプリのデータを
横から読み取る方法は無いでしょうか?

>>466
お勧めの本あったら教えてください。
勉強不足のようです。。。
0468デフォルトの名無しさんNGNG
>>467
最初からそう言えば分かりやすいのに。
> アプリケーションがやり取りしているデータ
で分かる奴がいるか?
データの具体的な中身も種類も、やり取りしてる相手も書かれてない。
0469デフォルトの名無しさんNGNG
>>467
チートでもしたいのか?

自前でやるならwinsockのrecvをwrapするDLLを作るか、
外部のアプリからAPIHookをかけるのが手っ取り早いだろうけど、
ただデータを見て、ちょっとした書き換えをやりたいだけなら、WPEPro等を使うのが楽
0470デフォルトの名無しさんNGNG
質問です。
いまファイル読み込みをやっていて
全角文字を0x80以上として、
0x80以上の値がきたら次の文字も読み込む
としているのですが、これだと半角カナの文字を判定することができないので
困っています。
何かてっとりばやい方法はないでしょうか?
0471462NGNG
>>469
キーワードいくつか頂いてありがとうございます。
ぐぐって勉強して来ます。

またお世話になるときはよろしくお願いします。
0472デフォルトの名無しさんNGNG
>>470
Shift JISなら
http://homepage1.nifty.com/herumi/adv/adv40.html#003
他にもWindowsならIsDBCSLeadByte()とか
0473デフォルトの名無しさんNGNG
>>467
横取り丸をためしてみそ。オープンソース(VC)。検索すればすぐ見つかる。
動機が不純そうだが、俺も不純な動機でいじったから許す。
0474473NGNG
訂正。
DLLサンプルがオープンソース。
httpの送受信書き換えはなんでも出来る。
0475デフォルトの名無しさんNGNG
>>471
http://winpcap.polito.it/
って、もうどっか行っちゃったのかよ・・・。
0476462NGNG
>>473
やりたいことにかなり近い物があります。
ヒントありがとうございます。

>>475
教授ありがとうございます。
参考にさせて頂きます。
0477デフォルトの名無しさんNGNG
>>472
うおー。
ありがとうございます。
0478デフォルトの名無しさんNGNG
>>454
OpenGL
SDL
glut
あたりで検索されたし
0479デフォルトの名無しさんNGNG
Windows専用で良いなら、システムコールで直接描くのが速くていいよ。
GDIというしくみ。「猫でも」にあるよ。
ピクセル単位での計算結果の出力が主体なら、GDIはちょっと遅いかも。
WIN32SDK+DIBで検索してみては?

速度よりも汎用性なら、>>478さんの言うとうり、OpenGLがいいね。
0480デフォルトの名無しさんNGNG
>>462
パケットモニタでググレ
0481デフォルトの名無しさんNGNG
先日から始めたばかりでの質問ですがよろしくお願い致します。

int hensu1, hensu2;
中略
hensu1 = ( hensu2 -40 ) * 0.5;

上記の計算式で hensu2 が 40 の時に途中でエラーが出ます。
この問題の条件として演算は整数とありましたので int を使いました。

自分で考えた限りでは式を二つに分けて零に乗算をしない事はできました。
ただ、もっとスマートに解決出来ないものでしょうか?
よろしくお願い致します。
0482デフォルトの名無しさんNGNG
>>481
40が全角だからです
0483デフォルトの名無しさんNGNG
>482
お答えありがとうございます。

ただ、残念ながら変数の値はきちんと半角で受け取っております。
0484デフォルトの名無しさんNGNG
>481
それでは返答のしようが無いです。
ソースを省略してはいかんです。
省略しても大丈夫と思った所にバグが有るものです。
0485デフォルトの名無しさんNGNG
>>481
エラーの内容くらいちゃんと書け。


# あと、「希望する動作」と「現在の動作」もな。
0486454 NGNG
>>457 さん
>>478 さん
>>479 さん
ありがとうございます。
やっぱり標準関数では無理そうですね。
Windowsのシステムコールですか。
UnixのシステムコールはかじってるんですがWindowsは全く
わからないですね。ちょっと勉強してみますか。
OpenGLはなんとなく手をだしたことないですね。やはり使いやすいんでしょうか?
ちょっとみなさんからもらったヒントを元にいろいろ検討してみようと思います。
ありがとうございます。
0487デフォルトの名無しさんNGNG
>>481-485
あの部分のあとで hensu1 で割ってるんだろう。
0488デフォルトの名無しさんNGNG
>>454
FLY も試してみそ
0489479NGNG
>486
がんばってね。おすすめは、
"猫でも" http://www.kumei.ne.jp/
"DIB" http://www.gen-ta.net/
どちらも、VisualC++が無いと厳しいかもです。
0490デフォルトの名無しさんNGNG
>>489
は?
0491479NGNG
>>490
へ?
0492デフォルトの名無しさんNGNG
>>491
ほ?
0493デフォルトの名無しさんNGNG
どうしてもわからないことがあるので質問させていただきます。
プログラムのリソースにexeやdllなどのバイナリを保持させた場合、
それを取り出すとバイナリリソースへのポインタが取得できますが、
このメモリ上にデータとして展開されたバイナリリソースから
インスタンスを生成する(実行する)ことは出来るでしょうか?
一旦それをファイルに書き出して実行するという手段以外で
方法がありましたらご教授願います。
0494デフォルトの名無しさんNGNG
リソースと実行コードではメモリ管理が異なるので不可能です。
可能にしている特殊分野もありますが、お勧めいたしかねます。
0495デフォルトの名無しさんNGNG
>>493
メモリに展開して、先頭アドレスにjmpする…じゃだめなの?
0496デフォルトの名無しさんNGNG
ローダーでぐぐれ
0497493NGNG
>>494
やはりファイルに落とすしかないのでしょうか・・・

>>495
保持しているポインタはメモリに展開された実行ファイルそのものなので
jmpだけで実行できないと思うのです。

>>496
検索ヒット数が多すぎてわかりませんでした。
0498496NGNG
自己解凍実行形式のLZHファイルとかZIPファイルとかが
事実上きみがやりたいことをやっている
0499493NGNG
>>498
レスありがとうございます。
自己解凍系もしらべましたが、あくまでデータとして扱っているので
インスタンスを生成するという主旨からはずれてしまうのです。
CreateProcessやLoadLibraryの引数がメモリに展開された実行ファイルへの
ポインタだったら楽なんですけどね・・・・
0500デフォルトの名無しさんNGNG
ソースはみた?
0501493NGNG
CodeGuruにあったものを見ました。
こちらはMFCでかかれていましたが、Win32sdkでも記述できるはずですので
そちらを参照しました。
0502デフォルトの名無しさんNGNG
セキュリティ上問題がありそう
0503496NGNG
参考になるかどうか分からないですが
http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_05/idnfw11_05_01.html
http://www.f-secure.co.jp/v-descs/v-descs2/sk-tech2.htm
0504デフォルトの名無しさんNGNG
>>496
ありがとうございます。
目を通してきますm(_ _)m
0505デフォルトの名無しさんNGNG
超超初心者です。申し訳ないんですが教えてください。
(重複スレで質問しちゃってマルチごめんなさい)

数値計算をしていてパラメタは全てdoubleにしているんですがこの2式

z[ 4 ] = y[ 2 ] ^2 - 2.0e2 ;
z[ 5 ] = y[ 3 ] ^2 - 20.0 ;

で 浮動小数点の不正な使用 とエラーになってしまいます。
なにがいけないんでしょうか…?
0506デフォルトの名無しさんNGNG
2.0e2
0507デフォルトの名無しさんNGNG
doubleと2でbitwise-XORをとるとはどういう了見だい?
0508505NGNG
よくわかんないんですけど、始め200.0にしてたんですが
それでもエラーが出たので
本見て変えてみただけです。。。
どうしたらいいんでしょうか?
0509505NGNG
この式の問題じゃないんでしょうかね?
0510デフォルトの名無しさんNGNG
#include <math.h>

z[4] = pow(y[2], 2) - 2.0e2;
z[5] = pow(y[3], 2) - 20.0;
0511505NGNG
>>510
おおおおお!行った!!
有難うございます!!ほんと有難うございます。・゚・(ノД`)・゚・。
^じゃダメなんですね。。。助かりました<(_ _)>
0512デフォルトの名無しさんNGNG
昔のBASICの人だったのかな。

いちいち関数呼び出しになるのが馬鹿馬鹿しいよね・・・。
0513デフォルトの名無しさんNGNG
なんだかグラフィックの話題が出てたけれど、やっぱりopenGLが主流なのかな?
DirectXでやってきたけれど仕様変更について行くのが嫌になってきて。
いまからでもopenGL覚えた方が良いんだろうか...
0514デフォルトの名無しさんNGNG
初心者を超えて更に超えた所には一体何があるのだろう。
初心者を超えたら只の初級者だと思うのだが。
0515デフォルトの名無しさんNGNG
超初心者
0516デフォルトの名無しさんNGNG
誰か助けてください。
次の関数で0≦x≦2の範囲で、xの値の0,1ごとに
yの値を計算するプログラムを作成せよ。画面にはx、y両方の値を表示す
るようにすること。while文を使うこと。y=x*x−3x+5/4
0517デフォルトの名無しさんNGNG
>>514
入門者→初心者→初級者→中級者→上級者。
初心者を超えたら初級者になる。
0518デフォルトの名無しさんNGNG
>>516
マルチやめれ
0519516NGNG
すいません。期限ギリギリだったので。反省します。
0520デフォルトの名無しさんNGNG
理由としてダメ人間の部類だな。
0521デフォルトの名無しさんNGNG
ITEM name, password;

これってどういう意味ですか?
0522デフォルトの名無しさんNGNG
int name, password;

これってどういう意味ですか?
0523デフォルトの名無しさんNGNG
たったこれだけのこともだれもおしえてくれないんですか?
0524にんどるNGNG
質問なんですが、
ソートされたデータの配列を対象としたとき、その中に与えられた任意のキャラクタが含まれているか否か2分探索より効率的に判断できるようにするにはどのような方法を採用すればいいんですか?
教えてください。
0525デフォルトの名無しさんNGNG
>>523
回線気って首吊って氏んどけ
0526デフォルトの名無しさんNGNG
普通にmemchr()でいいんでね?
0527デフォルトの名無しさんNGNG
構造体のメンバの並べる順序って重要なんですか?
ソースを分割する際に構造体のメンバの順序変えて宣言したら
実行時にメンバが入れ替わってたんで
0528デフォルトの名無しさんNGNG
>>527
そりゃそうだ。
メンバはメモリ上でも宣言した順に並べられる。
0529デフォルトの名無しさんNGNG
Visual C++ 6 (+SP6) で setvbuf がいつもエラーを返すのですが、
どうしてでしょうか。

FILE* fp = fopen("test.txt", "w");
if (! setvbuf(fp, NULL, _IOFBF, 1024*1024)) {
 printf("Failed to reserve buffer.");
}

このコードは 1MB のバッファを確保しようとしていますが、
64KB, 8KB でもだめでした。
0530デフォルトの名無しさんNGNG
すいません、上げるの忘れました。
0531デフォルトの名無しさんNGNG
>>529
> 戻り値
> 正常に終了した場合は 0 を返します。
0532529NGNG
>>531
ありゃりゃりゃー、そうでしたか。
ありがとうございます!
もう1時間ほど悩んでいました。。。
0533デフォルトの名無しさんNGNG
UNIX で自分のプログラムのフルパスを取得するには
どうしたらよいでしょうか。
Win32 では GetModuleFileNam() が使えるんだけど。。。
0534デフォルトの名無しさんNGNG
>>532
有効範囲は 2 < size < 32768
とも書いてある。MSDNよく読め。
0535デフォルトの名無しさんNGNG
>>534
すいません。。。よく読むようにします。
0536デフォルトの名無しさんNGNG
>>524
二分探索が使えるなら、それ以上に高速なものってあまり思いつかないな
むしろ二分探索が使えない時の速度の上げ方の方が悩むところだと思うけれど
>>526
memchr()は先頭から順番に探索してるだけじゃね?
0537デフォルトの名無しさんNGNG
一文字探すにはそれで充分かと思ってね。ソートされていることに意味はないし。
0538デフォルトの名無しさんNGNG
>>537
ソートされていないと2分探索は使えない
0539デフォルトの名無しさんNGNG
>>533
GetModuleFileNam()って機能を知らんので外してるかもしれんけど
#include <limits.h>
#include <stdlib.h>
char *realpath(const char *path, char *resolved_path);
このへんかなぁ? これにarg[0]渡せば行けそう

Linuxでproc fs使えるなら
/proc/self/cmdline
を読むのもいいかも
0540デフォルトの名無しさんNGNG
だから、ソートされたデータでもその中の一文字探すのに2分探索できないっしょ。
先頭の文字ならいざ知らず。
0541デフォルトの名無しさんNGNG
>>539
argv[0]にフルパスが入っている保証はない。
0542デフォルトの名無しさんNGNG
>>541
argv[0]にフルパスが入っているなら
char *realpath(const char *path, char *resolved_path);
なんて使わなくてもいいのでは?
0543デフォルトの名無しさんNGNG
>>542
argv[0]はコマンドラインから渡るから
入る場合もあれば入らない場合もあるということだろ
0544デフォルトの名無しさんNGNG
541の「フル」パスってのは誤表記ってことね
>>543
その入らない場合ってのはどんな場合を想定してる?
0545デフォルトの名無しさんNGNG
>>533
こんなの見付けた
ttp://www.freeml.com/ctrl/html/MessageForm/[email protected]/1076/
0546デフォルトの名無しさんNGNG
>>544
お前超初心者?
0547デフォルトの名無しさんNGNG
来たぞ来たぞ
0548デフォルトの名無しさんNGNG
共通ヘッダにはexternしか置いたらだめなんですか?
構造体の本体置いてもいいんですか?
本体置けたら共通ヘッダ以外に書かなくていいから楽なんだけど
0549デフォルトの名無しさんNGNG
当事者じゃないが揉めないうちに argv[0] についてまとめとくと、
・そもそも argv[0] に自分のプログラムのパスが入っているとは限らない。
 環境によっては設定されない場合もあるし、fake することも可能。
 規格上も単に program name とされており空白の環境も許容されている。
・argv[0] に自分のプログラムのパスが設定されるとしてもフルパスとは限らない。
 "./a.out" のように相対パスで設定されている可能性がある他、単にコマンド名だけで
 環境変数 PATH の探索によってフルパスが得られる場合もある。
 この場合は、realpath だけでは解決することができない。

参考:
ttp://www.nurs.or.jp/~asada/FAQ/UNIX/section4.4.html

こんなもんでどうでしょ?

>548
「構造体の本体」とは何かを述べよ。
0550デフォルトの名無しさんNGNG
>>549
extern付けてない構造体のことです
0551デフォルトの名無しさんNGNG
>>550
>本体置けたら共通ヘッダ以外に書かなくていいから楽なんだけど
その「本体」とやらは一個じゃないの?
それをも省略したいってこと?
0552デフォルトの名無しさんNGNG
とりあえず、本体とやらは
struct hoge{
 int integer;
 char character;
};
のことだよね
0553デフォルトの名無しさんNGNG
静的な構造体のインスタンスのことではないよね?

関数のプロトタイプ宣言と定義のこととごっちゃになってるんじゃない。
0554デフォルトの名無しさんNGNG
>>551
共通ヘッダにexternなしで構造体宣言書けばいいとおもったんだけど
実際やてみるとエラーがでました
共通ヘッダにexternなしの構造体書くと各ソースにexternなしの構造体書いたことになって
定義がダブることになるからエラー出たのかなと思いました
>>552
はいそのことです
ソースを分割するとソースごとに本体以外はexternを前につけて書かないといけないんで
>>553
552のことです
0555デフォルトの名無しさんNGNG
>>554
それは何かがおかしい。君の言っていることが正しいことになると、例えば
C++の標準ライブラリはほとんどがエラーを発することになる。
0556デフォルトの名無しさんNGNG
>>554
エラーが再現する最小のコードを書いて貼ってみてよ
恐らくすぐ解決するよ
0557デフォルトの名無しさんNGNG
>>555
>>556
最小のコード書いてエラーを再現しようとしましたけど再現できませんでした

LNK2005: "struct a b" (?b@@3Ua@@A) は既に c.obj で定義されています。
というエラーがでます
c.cppファイルには定義は書いてないので定義がだぶることはないと思うのですが・・・
0558デフォルトの名無しさんNGNG
後、typedefの構造体にextern付けるとなんでエラーがでるんですか?
0559デフォルトの名無しさんNGNG
>>557
とりあえず再現してなくていいから
その今書いたのを貼ってみて

それにある間違いを指摘するから
その知識を元に当初のコードを修正すると
問題の一つは解決すると思うよ
0560デフォルトの名無しさんNGNG
//mein.cpp
#include <stdio.h>
#include "common.h"
int main()
{
struct x z;
z.c=10;
hoge(z);
}
//test.cpp
#include <stdio.h>
#include "common.h"

void hoge(struct x z)
{

printf("%d\n" , z.c);
}
//common.cpp
struct x
{
int c;
};
void hoge(struct x z);

です、これだとエラーが出ないのです
0561デフォルトの名無しさんNGNG
common.hは?
0562デフォルトの名無しさんNGNG
>>561
すいません
訂正します
×common.ccp→○common.h
0563デフォルトの名無しさんNGNG
557の
>LNK2005: "struct a b" (?b@@3Ua@@A) は既に c.obj で定義されています。
このエラーは元のコードのか

>c.cppファイルには定義は書いてないので定義がだぶることはないと思うのですが・・・
c.cppになくてもinclude先に
struct a b;
ってない? 直接c.cppからincludeされてなくてもincludeの連鎖上に

c.cppってでかいの?
0564デフォルトの名無しさんNGNG
>>560
それと関係ないけど560の
void hoge(struct x z)
は参照で受けた方が良い
structも省略して
void hoge(const x &z)
0565デフォルトの名無しさんNGNG
>>563
元のコードのです
c.cppは140行くらいで
#include <stdio.h>
#include "common.h"
しかインクルードしていません
あとc.cppはソルーションエクスプローラ中のソースファイルホルダの最上部に位置してます
>>564
ご忠告有り難うございます
0566デフォルトの名無しさんNGNG
要するに、こんな事をやっちゃってるんでそ

//--- common.h
#ifndef common_h
#define common_h
struct a { int foo; } b;
#endif // common_h

//--- main.cpp
#include "common.h"
int main () {}

//--- common.cpp
#include "common.h"

これじゃ struct a 型変数 b の実体が main.obj にも common.obj にも
存在しちゃって、リンカの中の人も困る罠。
0567566NGNG
こうすれ。なぜかは自分で考えるよろし。

//--- common.h
#ifndef common_h
#define common_h
struct a {};
extern a b; // <- このプロジェクトのどこかに1つだけ b があるよ、と
       //   コンパイラ (やリンカ) に指導している
#endif // common_h

//--- main.cpp
#include "common.h"
int main () {} // <- ここで b を使う事は *もちろん* 可能

//--- common.cpp
#include "common.h"
a b; // <- b の実体はここにある

>566 も↑のコードも、ファイルをそれぞれ分けて保存すれば
きちんとコンパイルもリンクも通るから。試してみるべし。
0568デフォルトの名無しさんNGNG
(;´Д`) 何を書いてるんだ自分は。

>566 はリンクは通らない。
>557 のエラーが再現するコードな。
0569デフォルトの名無しさん NGNG
メンバに2次元の文字列配列str[128][128]を持ったクラスがあります。
外からこの文字列配列を丸ごと取れるようにしたいんですが、
どうやって書いたらよいのでしょうか。
文字列を返す為のメンバ関数の型とか、
もらう方の側の書き方とかがどうすればよいのか分かりません。
(もらう方法があるとしたら)もらう方の文字列をstr2[128][128]として、
サンプルを書いていただけると大変助かります。よろしくお願いします。
0570デフォルトの名無しさんNGNG
char const (&get_str())[128][128] const{ return str; }

char const& str2[128][128] = moge.get_str();
0571デフォルトの名無しさんNGNG
constの位置間違ったかもしれない。
まぁいいか。
0572デフォルトの名無しさんNGNG
>>570
ありがとうございます。
関数の方が初めて見る書き方でどこが切れ目か分からないので
とりあえずクラス定義の中にそのままの形で書いてみたのですが、
・const char (' は不正です
・{' の前に予期しないトークンがありました。関数の本体は無視されます
と怒られました。

できたらクラス定義の外で「戻り値 クラス名::関数名()」みたいに書く
方式で教えていただけないでしょうか…
0573デフォルトの名無しさんNGNG
class Hoge
{
  char str[128][128];
public:
  const char (&get_str())[128][128] const;
};

const char (&Hoge::get_str())[128][128] const {return str;}

でもこれぐらいインライン展開した方がいいと思うけど。
0574デフォルトの名無しさんNGNG
やっぱconstの位置間違ってたわ。
char const (&get_str() const)[128][128]{ return str; }
0575569NGNG
たびたびすいませんです。今度は呼ぶ側で怒られました。
こっちは変更いらないんですよね?
ちなみに環境はVC++ですが、環境のせいとかありえますかね…

: 参照の配列は宣言できません。
: 'const char [128][128]' から 'const char *[128][128]' に変換することはできません。
(新しい動作 ; ヘルプを参照)この変換が可能なコンテキストはありません。
0576デフォルトの名無しさんNGNG
呼ぶ側も間違った
char const (&str2)[128][128] = moge.get_str();
俺もそろそろぼけ始めたか・・・。
0577デフォルトの名無しさんNGNG
typedef したらどう書ける?
0578569NGNG
>>576
成功したみたいです。なんか難しいですね。
あんまり意味を理解できてないですが。。。修行します。
度々すいませんでした。ありがとうございました。
0579デフォルトの名無しさんNGNG
std::vector<std::string>じゃダメなのか?
0580デフォルトの名無しさんNGNG
>>567
試してみます
ありがとうございました
0581569NGNG
>>579
参考のためにSDL(?)での書き方も教えて
頂けるとかなり嬉しいのですが。
0582デフォルトの名無しさんNGNG
>>567
ばっちりうまくいきました
本当にどうもありがとうございました
0583デフォルトの名無しさんNGNG
すいません質問があります。
strcspn関数についての質問なのですが、

文章の中で全角スペースがある場所までのバイト数を求めたいのですが、

int aNum = strcspn( "あいうえおーかきくけこ", " " );
とやると aNumに 10が入ってしまいます。

なぜか全角スペースの検査に"ー"が反応してしまうようなのですが、
これは何か使い方を間違っていますでしょうか?
0584デフォルトの名無しさんNGNG
例えばShift_JISにおいては、" "は0x81と0x40という二つの文字からなる文字列だから、
strcspnは0x81と0x5bからなる"ー"という文字列の文字0x81を検出した。それだけ。
0585デフォルトの名無しさんNGNG
>>581
STL(standard template library)な。
class hoge{
std::vector<std::string> fuga;
public:
std::vector<std::string> get_fuga(){return fuga;};
};
0586デフォルトの名無しさんNGNG
すいません。今勉強中の身でタダの愚痴なんですが、ポインタは、例えば

int *ptr;

とせずに

pointer int ptr;

という表現で、設計すればよかったんでは?const int a; を見て思い付きました。
なんで int *ptr; という表現になっちゃったんでしょうか??
初期の学習者は、*演算子の意味と混同しそうだし、関数へのポインタの表現も少しややこしく見えます。
ただ自分が見慣れていないせいだとは思いますけど。
0587デフォルトの名無しさんNGNG
関数へのポインタの表現はtypedefでもすれば、初心者でも
大丈夫だと思うんだが。
0588デフォルトの名無しさんNGNG
>>586
キーワードを増やしたくなかったんだろう。
0589デフォルトの名無しさんNGNG
>>586
template <class T> class ptr;
でも作りなされ(w
0590デフォルトの名無しさんNGNG
>>586
int *ptr は、ptr 変数に * をつけて逆参照すると int 型だよー、っていう意味。
pointer キーワードを使うと、そういう意味がわからなくなるね。
0591デフォルトの名無しさんNGNG
んじゃ、
int a;
int * ptr = & a;
* ptr = 0;
のかわりに、
int a;
pointer int ptr = enreference(a);
dereference(ptr) = 0;
とでもするかね。
0592569NGNG
>>585
ありがとうございます。
覚えたら書き方的には分かりやすそうでよいですね。
勉強になりました。ありがとうございました。
0593デフォルトの名無しさんNGNG
むしろ俺はなんで*なのか?なんだよな
&じゃだめだったのかな?
0594デフォルトの名無しさんNGNG
>>593
& をつかうんだったらさ、
int* &ptr;
は、ptr に & をつけたら int* 型だよ、となっていいけど、
int &ptr
は、ptr に & をつけたら int 型だよ、となって
これは逆参照を表す。

つまり、アドレスをとる & 演算子と、逆参照の & が混同しちゃうだろ。
0595デフォルトの名無しさんNGNG
単項 -> <-演算子を定義しても良かったかもね。
int i;
int<-p = ->i;
int j = <-p;

いややっぱ分かりにくいわ。
&*は一文字で適度に目立つのがいいね。
0596デフォルトの名無しさんNGNG
APLの悪夢の再来ですか?
0597デフォルトの名無しさんNGNG
みなさん愚痴を聞いて頂いてありがとうございます m(_ _)m
typedef, template はまだ到達してません…
ポインタ宣言は>>590さんの書き込みでやっとはっきり理解できました。ありがとうございました。
0598デフォルトの名無しさんNGNG
最近、クラスを勉強し始めた。
でも、クラスの利点がイマイチ分からない。

サンプルを用いながら、「ほら、こんなに便利!わかったかゴルァ!!」
ってな感じにおしえて!
0599デフォルトの名無しさんNGNG
憂鬱本を買って読む。これ。
0600デフォルトの名無しさんNGNG
Delphiでもさわってみれ
0601デフォルトの名無しさんNGNG
クラスが分かると、世の中に出回ってるC++で書かれたライブラリを利用できるようになります。
ね、便利でしょ?w
0602デフォルトの名無しさんNGNG
>>598
std::stringとかstd::vectorとか便利。
面倒なメモリ管理から逃れられる。
0603デフォルトの名無しさんNGNG
>>602
それクラスの利点じゃないし
0604デフォルトの名無しさんNGNG
>>598
C使いで構造化プログラミングに精通しているなら、「情報の隠蔽化」だけでも便利だと思う。
その方向でよければ具体例を挙げてみようか?
0605デフォルトの名無しさんNGNG
>>598
とりあえずクラスの意味を勉強しておいて、
クラスが使われているコードを数多く読むようになれば
その便利さやきれいさがわかる。

勉強してすぐによさが分かりにくいものって、よくあるよね。
そういうときはとにかく詰め込んでおけばいいと思うよ。私は。
0606デフォルトの名無しさんNGNG
本質的にクラスが良く分かると、世の中に出回ってるC++で書かれたライブラリを使いたくなくなります。
0607デフォルトの名無しさんNGNG
他人の書いたクラスはよう分からん
0608デフォルトの名無しさんNGNG
>>607
あなたか
その他人がクラスをあまり理解していないと思われます
0609デフォルトの名無しさんNGNG
最初はパターンを使ってエレガントに書いてたとしても
だんだん汚くなってきて終いには訳が分からなくなるもの
0610デフォルトの名無しさんNGNG
それでwindowsとかmacOSみたいな代物が世の中に出回ってるわけね
0611デフォルトの名無しさんNGNG
正直、継承とかってガンガン使ってる?
0612デフォルトの名無しさんNGNG
>>611
逆に聞こうか。
使わないでどうしてるんだ?
0613デフォルトの名無しさんNGNG
バカみたいに継承するのはやめてください
0614デフォルトの名無しさんNGNG
正直、実装含む多重継承とかってガンガン使ってる?
0615デフォルトの名無しさんNGNG
継承するより、直にクラス使うほうが軽いんでない?
0616デフォルトの名無しさんNGNG
オブジェクト指向が出て来た頃は継承はもてはやされたんだろうが、
最近では継承を出来るだけ使用しないと考え方が広まってきたんでしょ。
無駄な継承はデバッグを困難にさせ、結局は開発効率を落とすとか。
0617デフォルトの名無しさんNGNG
MFC使うと嫌でも継承使う羽目になるのだが、自分ではそれほど継承を使うことはない。
0618617NGNG
つーか、多段継承クラスを作ることは少ないと言うべきだったか。
0619デフォルトの名無しさんNGNG
つーかそれは継承以前の問題じゃ。
0620デフォルトの名無しさんNGNG
int a=10;
int b=10000;

a=a+a;
b=b+b;

の計算はどちらが速いのでしょうか?
桁数が多いほど計算速度も遅くなるのでしょうか?
0621デフォルトの名無しさんNGNG
いっしょ。
ならない。
0622訂正NGNG
for (i=0;i<1000;i++)
{
a=a+a;
b=b+b;
}
です
0623デフォルトの名無しさんNGNG
>>621
なんでですか?
桁数が多いほど遅くなりそうな感じがするのですが…
0624デフォルトの名無しさんNGNG
>>623
桁数の応じて遅くなったら困るだろ。
CPUの設計者がそこらへん気を使ってくれてるんだよ。
0625デフォルトの名無しさんNGNG
簡単なテスト用コードお願いできますか?
0626デフォルトの名無しさんNGNG
>>623
桁数が多いほど遅くなりそうに思うのはなぜだい?
0627デフォルトの名無しさんNGNG
もちろん32ビットCPUで64ビット整数の演算をさせたら大抵32ビット整数演算の2倍の時間が掛かるし、実数演算は更に時間が掛かる。
0628デフォルトの名無しさんNGNG
int型はそのマシンで最高速度の演算が可能な大きさであることが保障されているので
int型に入るならどんな計算も一緒
0629デフォルトの名無しさんNGNG
>>628
そんな保証はねーよ。
「自然な」とかいういいかげんな指定があるだけ。
0630デフォルトの名無しさんNGNG
では

int a = 10, b = 100000;
int c = 2, d = 997;

a = a / c;
b = b / d;

だと、どちらが速いですか?
0631デフォルトの名無しさんNGNG
>>630
どっちも最適化で消える(プ
0632デフォルトの名無しさんNGNG
じゃ、volatile 付けたとして。
0633デフォルトの名無しさんNGNG
T[1000000]に対する演算だったりするとTの型でかなり処理時間かかるけどな。
0634デフォルトの名無しさんNGNG
>>630
一応マジレスしとくと、「同じ」
0635デフォルトの名無しさんNGNG
コンパイラが非常に賢ければ/2はshiftにしてくれるかもしれんが
まあ一緒だろうな
0636デフォルトの名無しさんNGNG
いや、どちらも最適化で割り算そのものが消える。
0637デフォルトの名無しさんNGNG
gcc環境でC++によるコマンドラインプログラムを作っており、悩んでいることがあります。
起動時に設定ファイル(パラメータが入っています)を読み込みたいのですが、
作ったプログラムと同じディレクトリに置いてある設定ファイルを読むためにはどのよう
に記述すれば良いしょうか?

設定ファイルをソースの中に埋め込んでも良いのですが、
ほぼ一つしか使うことが無いとはいえ2種類あり、
一つが3000行ちかくありますので
外部に出したほうがよいと自分は考えております。

FAQでしたら申し訳ありません。
0638デフォルトの名無しさんNGNG
>>636
結論は「同じ」でいいんだよね?
0639デフォルトの名無しさんNGNG
C言語からORACLEのPL/SQLを呼びたいのですが

どうしたらできます?
0640デフォルトの名無しさんNGNG
>>630
x86アーキテクチャではこっちの方が速い
unsigned int a = 10, b = 100000;
unsigned int c = 2, d = 997;

a = a / c;
b = b / d;
0641デフォルトの名無しさんNGNG
>>639
OracleJapanに問い合わせる。
#そしてoo4oを使う羽目になる。

>>638
そそ、シフトがどうとかではなく、単にどちらもイミディエイトな代入になることが予想される。
0642デフォルトの名無しさんNGNG
9
3969
29929
1999396
299739969
2909199969
19299599929
909995799969
???????????????

なんかC言語知ってる方なら?に入る数字がわかるらしいのですが・・・
わかる方がいたなら教えてください、お願いします・・・・
0643デフォルトの名無しさんNGNG
>>636
a,b代入されてるじゃん多分消えないよ
0644デフォルトの名無しさんNGNG
>>640
ただし、最適化を一切行なわない、比較する意味のない条件においてのみ。

>>637
カレントワークディレクトリに置いていいならfopen("foo", "r")でいいだろう。
実行モジュールと同じディレクトリに置きたいなら、環境依存。
Unixなどのコマンドライン環境では、一般的には無理。
Windowsでは限定的には実行モジュールのあるディレクトリ=カレントワークディレクトリとなるが、
決定的ではない。
0645デフォルトの名無しさんNGNG
>>637
移植性を考慮しないならOSなどの環境を書いて再度相談すべし。
0646デフォルトの名無しさんNGNG
割り算が消えるというのは
掛け算に直されるという意味ですか?
0647デフォルトの名無しさんNGNG
>>643
実験してから出直しておいで。

>>646
>>641
0648デフォルトの名無しさんNGNG
>>644
> Windowsでは限定的には実行モジュールのあるディレクトリ=カレントワークディレクトリとなる

Windowsでもそんなことは期待できない。
WindowsならGetModuleFilename()が使える。
0649デフォルトの名無しさんNGNG
>>648
あなたの頭にある、その白地に黒っぽい丸の描かれた球状の物体はガラス細工か何かですか?
0650デフォルトの名無しさんNGNG
>>644
>>645
お返事ありがとうございます。
将来的にはWINDOWSでも動かしたいなとは思っています。
現時点では、UNIXで動作すればよいです。

一応自分なりの考えをまとめました。
CFLAGSで、make installで入る予定のフォルダを指定してプログラム内に埋め込む。
プログラム内で、
実行モジュールと同じディレクトリと、カレントディレクトリ
の2箇所に設定ファイルがあるかどうかを確認する。
発見できればOK、無ければエラー終了。
と考えております。

0651デフォルトの名無しさんNGNG
>>649
「限定的には」「決定的ではない」なんてのはちゃんと読んだ上で言ってんだよ。
644の書き方だと、UnixとWindowsでOSレベルの差が有るように読めちゃうだろ。
0652デフォルトの名無しさんNGNG
>>649
おまえはアフォ
0653デフォルトの名無しさんNGNG
operator+=を書くときに
メンバとして
Hoge& operator+=(const Hoge& h)
と書くのと、グローバルに
Hoge& operator+=(Hoge& h1, const Hoge& h2)
と書くことの違いはなんですか?
特に違いは無く後者のほうはHogeと関係の無いところで演算子を定義できる便利機能ということでしょうか?
0654デフォルトの名無しさんNGNG
>>653
違いはメンバ関数か否か、としか言いようがないな。

大抵はprivateメンバを触る必要があるだろうからメンバになるけど、
friendにする必要がなければグローバルでも全然問題ないし。
0655デフォルトの名無しさんNGNG
継承とか
0656デフォルトの名無しさんNGNG
>>654
thx
0657デフォルトの名無しさんNGNG
継承はポリモーフィズムを活用するために利用するのであって、
インタフェースが似てるからとかいう理由だけで継承するのは
間違い。
0658デフォルトの名無しさんNGNG
>>653の質問に関連するとおもいますが、

class Complex
{
    double r, i;
    public :
     Complex(double r= 0.0, double i = 0.0) : r(r), i(i) {}
     double real() const{return r;}
     double imag() const{return i;}

     Complex & operator += (const Complex & rhs) throw ()
     {
       r += rhs.real();
       i += rhs.imag();
       return *this;
     }
   };

上で定義した複素数クラスで複素数同士の和を計算するオペレーター
operator += (const Complex & rhs)
では、引数が1つですが、
a+=b
を計算すると、どうしてa+bが計算されるのかわからないんす。
この場合、引数はbだと思いますが、aも引数にならない(なっているのかもしれない)
んでしょうか?
どう考えたらいいんすか?
とにかく、お聞きしたいのは、引数が一つでありながら、引数が2ついるような計算が
どうやって実現されているのか、っす。。
0659デフォルトの名無しさんNGNG
>>658

a+=b;
は
a.operator+=(b);
0660デフォルトの名無しさんNGNG
>>650
UNIXだと
インストール先のパスをPREFIXとすると
その手の設定ファイル(仮にhoge.confとする)は
$PREFIX/share/hoge/hoge.conf
こんな感じに置くのが一般的な気がする

PREFIXは
$ ./configure --prefix /usr/local
こんな感じで指定
0661デフォルトの名無しさんNGNG
すいません初歩的な質問かもしれません。
C言語の標準命令でコンソールアプリケーションのカーソルを
移動させたり画面を消去したりする命令があれば教えてください。
printfでエスケープシーケンスを使う以外の方法が知りたいのですが‥
よろしくお願いします。
0662デフォルトの名無しさんNGNG
>>661
ないよ。
コンソールのカーソルなんて想定されてないし。
0663デフォルトの名無しさんNGNG
>>661
環境依存だけど

UNIX
system("clear");

Windows
system("cls");
0664デフォルトの名無しさんNGNG
>>661
#include <windows.ini>

COORDp;
p.X = x;
p.Y = y;
SetConsoleCursorPosition(h, p);
0665デフォルトの名無しさんNGNG
>>662-664
即レスありがとうございました。
標準命令ではないんですね。
>>664さんの方法でも調べてやってみます。
この場合コンソール画面のハンドルを取ってこないと駄目なんですね。
画面消去だけなら>>663さんの方法でできそうなんでこちらも参考にさせていただきます。
どうもありがとうございました。
0666デフォルトの名無しさんNGNG
>>650
正しくないとは思いつつもbin/以下に設定ファイルを入れてました。
早速shareに変更します。
ありがとうございました。
0667デフォルトの名無しさんNGNG
>>653
friend関数なら多態が効く。
メンバ関数は効かない。
0668デフォルトの名無しさんNGNG
確かにクラスを使うと頭の整理はつくが、
デバッグは面倒になったような気がする。
0669デフォルトの名無しさんNGNG
>>668
それは変だぞ。
0670デフォルトの名無しさんNGNG
hoge.exe の 0x00478bd0 でハンドルされていない例外が発生しました : 0xC00000FD: Stack overflow。
というエラーが出て
黄色い矢印がこの行を指してました
if (abs(a)==abs(b))

どうすればいいのでしょうか?
考えられる原因や対策を教えてください
0671デフォルトの名無しさんNGNG
>>670
>どうすればいいのでしょうか?
ソースを晒す。あと環境も。
0672デフォルトの名無しさんNGNG
>>668-669
いろんな力量の人が係わってるプロジェクトでは現実そうなるのでは。
スーパーハカー集団が組んでるならどんなクラスを使ってもいいんだろうけど。
0673デフォルトの名無しさんNGNG
>>671
ソースはサイズが大きいので無理です、すいません
環境はVC++.netです
0674デフォルトの名無しさんNGNG
>>672
いろんな力量の人が係わってるプロジェクトを純Cで遂行したら
その方が遥かにデバッグが面倒だと思うが?
0675デフォルトの名無しさんNGNG
>>673
初心者が何処で勘違いしてるかなぞソース見な誰もわからん。
ソース晒すのが嫌なら自力で解決しろ。
0676デフォルトの名無しさんNGNG
abs()が再帰しているか、defineマクロでaとかbとか使っているか、その辺かな?
0677デフォルトの名無しさんNGNG
>>667
単純ミスだとおもうのですが、メンバとfriend指定が逆ですよね。
Base*に入れた派生型のオブジェクトに対して呼ばれて欲しいoperatorが呼ばれないと。
そういうことですね。
0678デフォルトの名無しさんNGNG
>>659
>a.operator+=(b);

レスどうもです。
それでも、やっぱり引数が一つ(b)なのにもう一つの「a」 との和が計算できる
理由がわからんのです。。

それとも「a」も引数と考えていいんですか。。。?
0679デフォルトの名無しさんNGNG
char str[128]に入っている文字列を
LPSTR型に変換するにはどうしたら良いでしょうか?
0680デフォルトの名無しさんNGNG
>>678
> それとも「a」も引数と考えていいんですか。。。?

それが正解。
「thisポインタ」を調べれ。
0681デフォルトの名無しさんNGNG
>>678
そんじゃ君は
a.operator+=(b);
~
↑このaが意味ないと思ってるワケ?
0682デフォルトの名無しさんNGNG
C風に書くと
a->operator+=(this, b);
0683デフォルトの名無しさんNGNG
>>650
>CFLAGSで、make installで入る予定のフォルダを指定してプログラム内に埋め込む。
別の案としては今作っている実行ファイルは直接は呼び出さないようにして
$PREFIX/lib/hoge/hoge.real
みたいにパスの通ってないところに置いといて
hoge.realを呼び出す以下のようなhogeを$PREFIX/binに置いておくとか

$ cat hoge
#!/bin/sh
PREFIX=`which hoge | sed 's/\/bin\/hoge/ /g' | awk '{print $1}'`
$PREFIX/lib/hoge/hoge.real "$@"
exit

>>666
各ファイルの置場は
$ man hier
が参考になるよ

UNIXプログラミング質問すれの方が良いレスがつくかもね
0684683NGNG
ちょっと補足すると
hoge経由でhoge.real(当初のプログラム)を起動することで
arg[0]
からPREFIXが分かり設定ファイルの位置($PREFIX/share/hoge/hoge.conf)が特定出来ます
PREFIXの解析をダブらせたくなかったら

$ cat hoge
#!/bin/sh
PREFIX=`which hoge | sed 's/\/bin\/hoge/ /g' | awk '{print $1}'`
$PREFIX/lib/hoge/hoge.real $PREFIX "$@"
exit

みたいにしてhogeで得たPREFIXを引数に渡して起動してもいいかも
0685デフォルトの名無しさんNGNG
a+=b;
と
a=a+b;
は同値と形で覚えちゃえ!
0686デフォルトの名無しさんNGNG
a+=b;
を「aに足すのはb」と読むようになったら違和感なくなった。
0687デフォルトの名無しさんNGNG
fgetsでテキストファイルから読み込んだ時のストリームのフラッシュには
どのようにすればいいのでしょうか、
0688デフォルトの名無しさんNGNG
>>687
読み込んだときにフラッシュする必要はないと思うのだが。
再度読ませたいならシークすればいいかと。
0689デフォルトの名無しさんNGNG
a+=b;
は
mov eax, a;
add eax, b;
mov a, eax;
と覚えたら違和感なくなった
0690デフォルトの名無しさんNGNG
>>689
むしろ
lea eax, a
mov ebx, b
add [eax], ebx
の方がイメージ近くないか?
0691デフォルトの名無しさんNGNG
初心者にゃわからんて...orz
0692デフォルトの名無しさんNGNG
>>682
>a->operator+=(this, b);
なるほど。。そう見るってことっすか。
ちょっと目から鱗が落ちた感じっす。
どうもありがとうっす!
0693デフォルトの名無しさんNGNG
在日 +=ニューカマー

mov ニューカマー、半島人
add 密入国者、ニューカマー
mov 在日、密入国者
0694デフォルトの名無しさんNGNG
w

0695デフォルトの名無しさんNGNG
VC6 を使っているのですが、
MSDN に setvbuf で指定できるサイズの上限は 32768 未満
と書かれているのですが、1MB を指定してもエラーにならないのはどうしてでしょうか。
0696デフォルトの名無しさんNGNG
so-suyome
0697695NGNG
VC6 の CRT ソースコードは次のようになっていた。

#ifdef _WIN32
if ( (type != _IONBF) && ((size < 2) || (size > INT_MAX) ||
#else /* _WIN32 */
#if defined (_M_MPPC) || defined (_M_M68K)
if ( (type != _IONBF) && ((size == 0) || (size > INT_MAX) ||
#endif /* defined (_M_MPPC) || defined (_M_M68K) */
#endif /* _WIN32 */
((type != _IOFBF) && (type != _IOLBF))) )
return(-1);

MSDN のドキュメントは 16 ビット コンパイラでも
動作するように書かれているわけかな。。。
0698マイク ◆yrBrqfF1Ew NGNG
>>685
それは結城浩的には「aにbを足し込む」だな
0699デフォルトの名無しさんNGNG
原因不明のバグに取り憑かれてしまった
こんなのありえねーってなバグ
0700デフォルトの名無しさんNGNG
どんなの?
0701デフォルトの名無しさんNGNG
>>699
そうか、バグフィックス頑張れよ
0702デフォルトの名無しさんNGNG
しかしこいつもしつこいな
いつまで粘着するつもりだ

とりあえず下げることを覚えろ、この池沼めが
0703rNGNG
>>698
+= 足し込む
-= 引き込む
*= 駆け込む
/= 割り込む
&= 且つ込む
|= 或は込む
<<= 論理左シフト込む
>>= 論理右シフト込む

足し込む以外はちょっと不自然かな。
0704デフォルトの名無しさんNGNG
ちょっとどころじゃないだろw
0705デフォルトの名無しさんNGNG
a.func();
は、「aにfuncをどっとこむ」
0706デフォルトの名無しさんNGNG
>>705
こむってなに?
0707デフォルトの名無しさんNGNG
a+=b 「a」に「足す」の「は」「b」
a-=b 「a」から「引く」の「は」「b」
a*=b 「a」に「掛ける」の「は」「b」
a/=b 「a」を「割る」の「は」「b」
a&=b 「a」に「andる」の「は」「b」
a|=b 「a」に「orる」の「は」「b」
a<<=b 「a」を「左シフトる」の「は」「b」
a>>=b 「a」を「右シフトる」の「は」「b」

後半の演算子を「〜る」にしたのはちょっと不自然かな。
0708デフォルトの名無しさんNGNG
fuck
0709デフォルトの名無しさんNGNG
関数内でreturn書いたらそこから呼び出し元に戻るんですよね?
関数内の途中でで処理を終了したいときはそこにreturnを書けばいいのでしょうか?
0710デフォルトの名無しさんNGNG
Visual C++ (Mac版)ってないんですか?

すごくやりたいです。
もうCodewarriorやProject builderから逃げ出したいんです。
でもMacからは離れたくないんです。

夜も眠れません。。
だれか助けて。。
0711デフォルトの名無しさんNGNG
>>710
>もうCodewarriorやProject builderから逃げ出したいんです。

その気持ちはわかる。

>でもMacからは離れたくないんです。

その気持ちがわからん。
0712!=710NGNG
Macだとマシンの構成からOSまで全部同じなので調べるときに迷わないで済む。
0713デフォルトの名無しさんNGNG
>>712
何が?
0714!=710NGNG
システムオタクだっていうなら好きにしてくれ。
0715デフォルトの名無しさんNGNG
未だにMacOS7.6.3使ってるからOSXなんてちっとも判りませんが何か。
0716デフォルトの名無しさんNGNG
>>709
出来るけど、returnは関数の最後にひとつだけが好ましいとされている。
これもgoto論争ほどではないにしても昔から言われている問題。
簡単に構成しなおせるなら最後にひとつだけになるようにするほうが無難だと思う。

とりあえず、喪前が書こうとしている関数をさらしてみれ
0717デフォルトの名無しさんNGNG
#include <stdio.h>
struct a
{
int x;
int y;
};
int main()
{
struct a b[3];
b[0]={1,2};
}
としてbに値を代入しようとするとエラーが出ます
なぜでしょうか?
0718デフォルトの名無しさんNGNG
charからTCHARに変換するときって何使うんですか?教えてください。
0719デフォルトの名無しさんNGNG
>>717
>b[0]={1,2};
これは何ですか?
0720デフォルトの名無しさんNGNG
>>719
b[0].xに1
b[0].yに2を代入しようとしたのです
0721デフォルトの名無しさんNGNG
せめて入門書くらいは読め
もし既に読んでてその程度なんだったら人間やめろ
0722デフォルトの名無しさんNGNG
>>717
変数宣言時にこうやって初期化するしかない。
struct a b[3] = {{1,2}, {3, 4}, {5, 6}};
これは後に改良されていてC99対応コンパイラならb[0] = (struct a){1, 2};とできる。

C99非対応コンパイラでもこういう関数を作ることもできるがおすすめしない。
struct a create_a(int a, int b)
{
  struct a new_a = {a, b};
  return a
}
C++ならこういうのをコンストラクタに用意するのはたまに見かける。(これは良いと思う)
0723デフォルトの名無しさんNGNG
>>722
お返事ありがとうございます
早速試してみます
0724デフォルトの名無しさんNGNG
>>718
A2Tマクロ
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_atl_string_conversion_macros.asp?frame=true
0725デフォルトの名無しさんNGNG
>>723
書き忘れていたけど、当然こう書く方法もある。メンバ数が少ない物限定だが。
b[0].x = 1;
b[0].y = 2;
0726デフォルトの名無しさんNGNG
やさしいCにあったコードですが、

#include <stdio.h>
int main(void)
{
FILE *pf;
pf = fopen("test.txt", "w");
if (pf == NULL)
{
printf("ファイルをオープンできませんでした。\n");
return 1;
}
else {
printf("ファイルをオープンしました。\n");
}
fclose(pf);
printf("ファイルをクローズしました。\n");
return 0;
}

なぜ return 1 と return 0 を使い分けているのですか?
0727デフォルトの名無しさんNGNG
>>726
そのプログラム単一では意味がないけど
別のプログラム(Aとしよう)からそのプログラム(Bとしよう)を呼んだ場合に
Bの返り値(returnで返す値)によってAのその後の処理を分岐するのに使用する
0728デフォルトの名無しさんNGNG
プログラム終了時や関数終了時の返り値は基本的に
0が正常終了でそれ以外は異常終了ってことが多いから。
他のプログラムや関数で利用するときに便利でしょ。
0729デフォルトの名無しさんNGNG
>>727
なるほど、そういうことでしたか。
ありがとうございます。
0730デフォルトの名無しさんNGNG
>>725
重ね重ねありがとうございます
0731デフォルトの名無しさんNGNG
>>728
レスありがとうございます。
0732デフォルトの名無しさんNGNG
C++でμs単位でプログラムの実行を待機させるいい方法ないですか?
0733デフォルトの名無しさんNGNG
volatile { a = a; }
0734デフォルトの名無しさんNGNG
>>732
マイクロ秒待機させるってどんな用途なの?
0735デフォルトの名無しさんNGNG
>>734
制御系
0736デフォルトの名無しさんNGNG
>>735
割り込み使えよ
0737デフォルトの名無しさんNGNG
制御系だったら、チップによって違うだろうけれど内部になんらかのタイマを持っているんじゃない?
0738デフォルトの名無しさんNGNG
>>732-737
http://pc5.2ch.net/test/read.cgi/tech/1099574832/
0739デフォルトの名無しさんNGNG
>>734
C++でネットワークのシミュレーションを行っているのですが、
その中で使いたいと考えているのです。
0740デフォルトの名無しさんNGNG
>>739
http://pc5.2ch.net/test/read.cgi/tech/1098912550/891-899
ここのマルチじゃないよな?
0741デフォルトの名無しさんNGNG
環境くらい書け
0742デフォルトの名無しさん NGNG
.NETプログラム(__gcのついたクラス内)で、STLとか、
CのファイルAPIとか(FILE*とか)使うには
どうするんですか?
String*はwchar_tに変換できるみたいですが、
デフォルトでwide characterを使用するんですかね?
0743デフォルトの名無しさんNGNG
>>740
違います。ms単位でのやり方はわかっていたのですが、
もっと精度の良い方法はないものかと思って質問しました。
0744デフォルトの名無しさんNGNG
環境くらい書け
0745デフォルトの名無しさんNGNG
>>741,744
すみません。VC++です。。
0746デフォルトの名無しさんNGNG
>>743
あるにはあるけれど、マイクロ秒だと結果に誤差がありすぎて使いものになるかどうか
わからないよ
0747デフォルトの名無しさんNGNG
>>746
そうですか・・・
けど、一応教えていただけますか?
0748デフォルトの名無しさんNGNG
Windowsでμ秒を扱おうなどとは笑止。
0749デフォルトの名無しさんNGNG
>>748
Linuxなら可能ですか?
0750デフォルトの名無しさんNGNG
>>749
リアルタイムリナックスについて
http://pc5.2ch.net/test/read.cgi/linux/988393952/
0751デフォルトの名無しさんNGNG
パソコンなんぞでμ秒を扱おうなどとは笑止千万。
0752デフォルトの名無しさんNGNG
>>742
コピーコンストラクタを持たないGCのクラスにSTLは使えないらしい。
0753デフォルトの名無しさんNGNG
>>752
普通GCクラスはコンテナに入れるときもポインタ使うから
コピーコンストラクタは不要かと。
0754デフォルトの名無しさんNGNG
パソコンでピコ秒を扱うスレはここですか?
0755デフォルトの名無しさんNGNG
μ秒を扱いたいなら組み込み系
0756デフォルトの名無しさんNGNG
手元の本に「(デバッグが面倒でも)最低でもassert()は使え、使いまくれ!」
とあるので早速私もassert教にに入信しようと思ったのですが、
assert()ちゅうのはReleaseビルドだと完璧に無視されるのでしょうか?
ヘッダとやらを覗いてみてもプルプロセッサがゴチャゴチャしてて降参です。
0757デフォルトの名無しさんNGNG
はいそうです
0758デフォルトの名無しさんNGNG
>>757
便利なもんですなー、跡形もなくなりますか
使いまくります、レスありがとうございました
0759デフォルトの名無しさんNGNG
コードコンプリート?
0760デフォルトの名無しさんNGNG
static constなメンバ変数を初期化するのに、ヘッダにて
const int Hoge::value = 0;
と書いて複数翻訳単位からincludeするとリンカで多重定義だとおこられますよね。
しかし以下のようなtemplateクラスの場合は問題ないようですがどうしてでしょうか?
template<typename T> const T Hoge<T>::value = 0;

複数の翻訳単位でそれぞれ例えばHoge<int>を実体化させれば
valueもそれぞれに定義されそうですが。。。
0761デフォルトの名無しさんNGNG
ちなみに特殊化バージョンでは怒られました。
template<> const int Hage<int>::v = 0;
VC6です。
0762デフォルトの名無しさんNGNG
VC6を捨てるのが一番。
0763デフォルトの名無しさんNGNG
>>762
これは規格どおりの動作。どのコンパイラでも同じだろう。
0764デフォルトの名無しさんNGNG
>>760
テンプレートってそういうものだから。
0765デフォルトの名無しさんNGNG
たぶん >>760 は

>static constなメンバ変数を初期化するのに、ヘッダにて
>const int Hoge::value = 0;
>と書いて複数翻訳単位からincludeするとリンカで多重定義だとおこられますよね。

これの理由も分かっていないと思われ
0766デフォルトの名無しさんNGNG
ん、わかってるけど初心者スレなんだから、理由説明したってわからんでしょ。
それはそういうものだとしとくのが一番。
0767デフォルトの名無しさんNGNG
あー、初心者スレじゃなかったな。スマソ。
でも理由は面倒なので説明しない。
0768デフォルトの名無しさんNGNG
One Definition Rule(ODR) と、キーワードを置いておこう。
0769760NGNG
>>768
ODRは>>765に対するキーワードですよね?
>>760ではtemplateにしたところで複数翻訳単位から実体化すれば
ODRに引っかかるのではないのですか?という質問です。

main.cppでHoge<int>使用 Hoge<int>::value = 0;
sub.cppでHoge<int>使用 Hoge<int>::value = 0;
↓
リンカであぽーん
とならないのは何故ですかという質問です。
0770760NGNG
あれれれれ。そんなことを言い出すとテンプレートすべてがODR違反になりますね。
結局>>764ということで、templateとして解決されるということか。。。
0771デフォルトの名無しさんNGNG
>>760
アフォ?
0772760NGNG
>>771
えぇぇ。まだ間違っているの?
もう頭がパンクしました
0773デフォルトの名無しさんNGNG
複数の翻訳単位で実体化したとしても同じ型のテンプレートクラスは
1回しか生成されない罠。
でなきゃテンプレート使ってられないだろ。
0774760NGNG
>>773
了解です。
最初におおきなかん違いをして混乱しました。
0775デフォルトの名無しさんNGNG
ある変数の値が真になるまで待ってから次の処理を行う、という感じの
ソフトを作ってますが、CPU 使用率が 100% になってしまいます。
(あたりまえですが )
何か良い方法ってありませんでしょうか?
0776デフォルトの名無しさんNGNG
待ち時間はCPUを占有するな

以上
0777デフォルトの名無しさんNGNG
>>776
どうすれば占有しないように出来ますか?やっぱり sleep ?
0778デフォルトの名無しさんNGNG
>>777
・自分で見に行くのではなく、通知して貰えないか検討する。
・自分で見に行くなら最低限、ほんの僅かでもsleepする。
#Unixならselect()で代用化、Win32APIならSleep(1)。
0779デフォルトの名無しさんNGNG
>>778
ありがとうございます。
やっぱりそうですよね。Unix でネットワーク関連やったときは
select で行えたので問題なかったので、大丈夫と思ってましたが
Win では select が使えないでこういう問題になってしまいました。
通知というのは Unix でいうところの signal のようなものですね?
0780デフォルトの名無しさんNGNG
関数に戻り値がない時はreturnは書かなくてもいいのでしょうか?
0781デフォルトの名無しさんNGNG
return を値を返すもの、という考え方より
(関数に入って)戻ってくるという考え方の方がいいかと

ループ途中に一定条件で return で関数抜けるときとかによく使うしね
0782デフォルトの名無しさんNGNG
>>779
いや、Win32APIなら通知して貰う手段は色々あるよ。専用スレで聞いてみたら?
0783デフォルトの名無しさんNGNG
>>775
Win32API質問箱 Build24
http://pc5.2ch.net/test/read.cgi/tech/1098967135/
0784デフォルトの名無しさんNGNG
>>775
Windowsならある変数(boolだよな)の代わりにイベントオブジェクトを作り、待機にはWaitForSingleObject()などを使う。
0785デフォルトの名無しさんNGNG
ある未知のクラスに対し、何らかのイベントが発生したことを知らせたいのですが、
次の3つの方法以外に何かスマートな方法はありますでしょうか。
・(Cの)コールバック関数を接続する
・連絡用のクラスを作り、未知のクラスにこのクラスを継承させる
・externで連絡先クラスのオブジェクトを取り込む

具体的には、Qtのsignal/slotのような手法を取りたいのですが、
標準のC++でこれに似た方法は何かないですか?
0786785NGNG
つまり簡単に言うと、コールバック関数の接続をCの関数ではなく、
クラスのメンバ関数に行えるようにしたいわけです。
0787デフォルトの名無しさんNGNG
ソースに
printf(" %7.4f と %7.4f です。\n",x1,x2);
っていうのがあるんだけど、7.4って何?
0788デフォルトの名無しさんNGNG
>>787
整数部7桁 小数部4桁で揃え表示
0789デフォルトの名無しさんNGNG
>>788即レス 感謝です。
0790788NGNG
脊髄反射で間違えた(;´Д`)
全体で7桁揃えで、小数部の精度が4桁
0791デフォルトの名無しさんNGNG
整数→文字列への変換を行う関数ってありませんか?逆はatoi関数でできると思うのですが…
0792デフォルトの名無しさんNGNG
itoaか、printf系関数で%dを指定
0793デフォルトの名無しさんNGNG
itoaでしたか…ありがとうございます。
解説ページにitocってあったので勘違いしてましたorz
0794デフォルトの名無しさんNGNG
boost::lexical_cast<std::string>()が一番楽
0795デフォルトの名無しさんNGNG
そして一番遅い
0796デフォルトの名無しさんNGNG
しかし安全
0797デフォルトの名無しさんNGNG
そしてスマート
0798デフォルトの名無しさんNGNG
後からCOOL!!
0799デフォルトの名無しさんNGNG
そしてそのうち標準
0800デフォルトの名無しさんNGNG
例えばプログラムを組んでいて、クラスをほとんど構造体の代わりの
ように使いたい場合があります。

class A {
public:
int a;
int b;
};

のようなコンストラクタやデストラクタが明示的に定義されてないクラスの場合、
コンストラクタやデストラクタはデフォルトが使われるようなのですが
この場合のデフォルトコンストラクタ、デストラクタでは何が行われる
んでしょうか? a, bが0に初期化されたりするんでしょうか?

上記のような構造体代わりに使いたいクラスの例の場合、コンストラクタ
デストラクタは省略しちゃっていいんでしょうか?
0801デフォルトの名無しさんNGNG
>>800
デフォルトコンストラクタとデストラクタは何もしない
コピーコンストラクタは文字通りコピーする
0802デフォルトの名無しさんNGNG
構造体代わりに使いたいのであれば、struct使えばいいような。
違いはメンバのデフォルトがpublicかprivateかというだけな訳で。
0803デフォルトの名無しさんNGNG
>>800
むしろコンストラクタなしにしないと自由度が下がる。

A array[] = {
    { 10, 20, },
    { 30, 40, },
};

コンストラクタがあるとこんなことができなくなる。
0804デフォルトの名無しさんNGNG
構造体代わりに使いたいのであれば、構造体使えばいいような。
違いはメンバのデフォルトがpublicかprivateかというだけな訳で。

たしか継承する時にもpublicかprivateの違いでてこなかったか?
0805デフォルトの名無しさんNGNG
>>800
引数を必要としないコンストラクタとしての「デフォルトコンストラクタ」と紛らわしいので、
その意味では「デフォルト」と言わないほうがいい。
規格中の言葉に従って、「暗黙の」と言うのがお勧め。

暗黙のデフォルトコンストラクタは A() {} と同じ。
暗黙のデストラクタは ~A() {} と同じ。
0806デフォルトの名無しさんNGNG
>>805
明示的にA()呼べば、暗黙のデフォルトコンストラクタはメンバを初期化してくれる。
0807デフォルトの名無しさんNGNG
bcc32だとエラー E2015 runge.cpp 272: 'vector(long)'
と 'std::vector<T,Allocator>' の区別が曖昧 というエラーが
でてしまいます(bcc32 runge.cpp -lstdc++ -lm)。
Cygwinではコンパイルできます(gcc runge.cpp -lstdc++ -lm)。
bcc32でコンパイルするにはどうすればいいのですか?
お願いします。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1099536469&res=2
0808デフォルトの名無しさんNGNG
>>807
"butil.h"って何?これも晒してくれない事には何とも言えない。
0809デフォルトの名無しさんNGNG
>>808
添付についてたよ
0810デフォルトの名無しさんNGNG
どっかで
#include <vector>
と
using namespace std;
されちゃってるんじゃないかな。
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
この辺怪しそう。
つーか使うなこんなの。
どっちにしろvectorは紛らわしいから名前変えてみたら?
0811デフォルトの名無しさんNGNG
>>809
サンクス。
>>807
Number *vector(long nh);
こういう名前の関数は取りあえず名前替えれ。
0812デフォルトの名無しさんNGNG
>>806
PODに対しては特別にゼロ初期化がかかるというルール。
暗黙のデフォルトコンストラクタが初期化しているわけじゃない。

メンバに非PODを持ったり、デストラクタだけ定義したりすると
PODではなくなるのだが、その場合の動作については Defect Reports に載っている。
ttp://www.comeaucomputing.com/iso/cwg_defects.html#35
ttp://www.comeaucomputing.com/iso/cwg_defects.html#178
0813デフォルトの名無しさんNGNG
namespaceについて教えてください。
以下のようなソースを書きましたが、
'hoge' : 識別子がクラス名でも名前空間名でもありません
というエラーが出てコンパイルが通りません。
ポインタしか定義してないのでTestA.hはなるべく
includeしたくないのですがこういう場合どうするのが一般的なのでしょうか?

TestB.h の方に namespace hoge{ class TestA; }
というダミーの宣言(?)をつけておけば
一応コンパイルは通りますが何か気持ち悪いです。

======================
TestA.h

namespace hoge{
class TestA
{
};
}

======================
TestB.h

class TestA;

class TestB
{
hoge::TestA* ptrA;
};
0814デフォルトの名無しさんNGNG
正解は
======================
Test.A_fwd.h

namespace hoge{
class TestA;
}
======================
Test.A.h

#include "TestA_fwd.h"
namespace hoge{
class TestA
{
};
}
======================
TestB.h

#include "TestA_fwd.h"

class TestB
{
hoge::TestA* ptrA;
};
0815デフォルトの名無しさんNGNG
以下のようなソースがうまく動かないんですけど、どこに問題があるのですか?
getcharを無視して後のコードを処理してしまいます。

do {
printf("終了しますか(Y/N)?\n");
ch = getchar();
} while (ch == 'Y' || ch == 'y' || ch == 'N' || ch == 'n');

試しに以下のように変えてみてもやはりうまくいきません。
printfが2回でてしまいます。

while (1){
printf("終了しますか(Y/N)?\n");
ch = getchar();
if (ch == 'Y' || ch == 'y' || ch == 'N' || ch == 'n'){
break;
}
}
0816デフォルトの名無しさんNGNG
上のコードで、whileの後の
ch == 'Y'とかは ch != 'Y'の
書き間違いです。
0817デフォルトの名無しさんNGNG
>>815
それは多分、そのコード以前にscanf等の関数で処理されなかった
改行コード等のゴミが標準入力に残ってるからだと思われ。
面倒なら、do {の前にfflush(stdin);を入れてみるとか
0818デフォルトの名無しさんNGNG
>>817
レスありがとうございます。
fflush(stdin);を入れると、while(1)のほうではうまくいきました。
do の方はどうもうまくいきません。
0819デフォルトの名無しさんNGNG
char *p = malloc(100);
if(p==NULL){
 エラー処理
}else{
 本処理
 free(p);
}
Cでmallocに失敗したとき、エラー処理をしている人はいますか?
また、エラー処理にはどんなコードを書きますか?
実際に書いている人がいたら具体的に教えてください。
0820デフォルトの名無しさんNGNG
>>819
俺はこうしている。
if (p == NULL)
 return エラー値;
失敗時に0を返す関数なら0を返すし、失敗時に1を返す関数なら1を返す。
0821デフォルトの名無しさんNGNG
815
doの中にも
ch = getchar();
fflush(stdin);
とすることでprintfが2回処理されるのはなくなりました。
whileの条件式も
while (ch != 'Y' && ch != 'y' && ch != 'N' && ch != 'n');
でした。
初心者に付き合っていただいてありがとうございました。
0822デフォルトの名無しさんNGNG
根本的に間違っているけどまぁいいか。
0823デフォルトの名無しさんNGNG
>>820
同一ブロック内でmalloc/freeが完結しているような処理で、
エラーを返すインターフェースのない場合のエラー処理について聞きたいのですが。

そういうのはよくない、内部でmallocしているすべての関数にエラーを返す
インターフェースを作れ。という方針でやるべきですか?
0824デフォルトの名無しさんNGNG
質問です。
WindowsXP 上で、VC++ 6.0 SP5 を使っています。

ある MFC プロジェクトを新規作成し、
「プロジェクト」→「プロジェクトへ追加」→「ファイル」を用いて
外部から test.cpp と test.h を追加しました。
FileView にはこの2つのファイルが、
ClassView にはこのクラス内で定義されているクラスが表示されています。

プロジェクト名を Project とすると、CProjectView というクラスが最初から定義されていますが、
そのクラスの定義部分の // アトリビュート とあるところに、

(line:22) public:
(line:23) CClass test;

と追加したところ、
〜\projectview.h(23) : error C2146: 構文エラー : ';' が、識別子 'test' の前に必要です。

と言われました。
test.cpp、test.h は書籍の付録についていたもので、
22〜23 行目(上記)はサンプルを見てコピペしたものなので、エラーはないと思います。
プロジェクトへの追加方法が間違っているのかと思うのですが……。
よろしくお願いします。
0825824NGNG
書き忘れました。
CClass は、test.h で定義されているクラスです。
0826デフォルトの名無しさんNGNG
includeしてないんちゃうんか
0827デフォルトの名無しさんNGNG
>>823
do{}while(failed);
を書いておく。
失敗を外部に伝える手段が無い=絶対に成功しなければいけない関数で、
万が一失敗してしまったら、その関数を終わることが出来ない。
成功するまでひたすら繰り返すしかない。
失敗したくせに何事も無かったかのように関数を抜けるのは最悪のパターン。
0828≠820NGNG
>>823
例えば関数内でのmalloc()で確保するメモリ量が関数内で見積もれる場合、
MBオーダーでもなければ私はエラー処理しないこともある。
#外部要因でサイズが変わる可能性がある場合、そのサイズに制限がなければエラーチェックすると。
0829デフォルトの名無しさんNGNG
>>823
if (p == NULL)
{
 puts("スマソ\n");
 abort();
}
0830デフォルトの名無しさんNGNG
敢えてぬるぽを起こさせるべきだろう
0831デフォルトの名無しさんNGNG
Cで、

typedef struct foo {
    int bar;
    char *baz;
    int x, y, z;
} foo_t;

foo->bar = 0;
foo->baz = NULL;
foo->x = 1;
foo->y = 1;
foo->z = 1;

...のように初期化してゆくのと、

foo_t foo_static_initializer = { NULL, 0, 1, 1, 1 };
foo_t *foo = malloc(sizeof(foo_t);
*foo = foo_static_initializer;

とどちらがいいですか?
0832デフォルトの名無しさんNGNG
>>831
初期化用関数を書くのがいい。
0833デフォルトの名無しさんNGNG
>>831
後者は冗長だし可読性も低いから嫌い。
前者は構造体が小さければ普通に代入。
大きければ初期化忘れ等を考慮してmemsetで0fillして0とNULLのセットを省略するとか。
0834831NGNG
>>832-833
ありがとうございます。本当は、

/*ヘッダファイル内で*/
typedef struct foo foo_t;
foo_t *foo_new(/*some hints*/);

/*.cソース内で*/
struct foo {
/*メンバが10-*/
};
で、そのメンバ初期化関数foo_new()のなかで
foo->member = value_such_as_0_and_NULL;
がズラズラ20行近く並んだのを見て、なんかちょっとなぁと思いどちらが好ましいか聞いてみたくなったのです。
メンバが少ない時は前者でFAなのですすがすっt。

>後者は冗長だし可読性も低い
これはfoo_static_initializer = { ... }でどの初期値がどのメンバに対応するか一目で見て分かりにくい、ということですよね?
foo_t foo_static_initializer = {
    0, /*bar*/
    NULL, /*baz*/
とか値毎にコメントを付けるのもなんか面倒そうなので
アドバイス通りcalloc()して必要なメンバだけfoo->member = ...と書くことにします。

ちょっと積み込めすぎの気がしてきたので、グループ化して分けた方がいい気がしてきまったたt
0835デフォルトの名無しさんNGNG
なぜRuby以外の言語はこんなに糞なのですか?
教えてください!!!!!!!!!!!
0836デフォルトの名無しさんNGNG
Rubyの為なら死ねる!!!!!!!!!!!!!!!!!!!!!!!!!!
0837デフォルトの名無しさんNGNG
Ruby is nanbar one!
0838デフォルトの名無しさんNGNG

普通のgccでメールを送受信したいんですが
プログラム例ってどんなもんでしょう?


0839デフォルトの名無しさんNGNG
>>838
Rubyなら簡単だよ!!!!!!!!!!!!!!!1
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> gcc
0840デフォルトの名無しさんNGNG
>>839
じゃRubyでもおねがいします
0841デフォルトの名無しさんNGNG
返事がな(ry
0842デフォルトの名無しさんNGNG
>>831
そこでC99ですよ。
foo_t *foo = malloc(sizeof(foo_t);
*foo = (struct foo) {NULL, 0, 1, 1, 1};
0843デフォルトの名無しさんNGNG
すみませんプログラミングではないのですが質問があります
Borland C++ Compilerとメモ帳を使って勉強しています

今までC言語の基礎をやっていたのですが
WINDOWSプログラミングの方に行こうとしたのですが

WINDOWSプログラミングをするとき
「Broland C++ Compilerの場合は-Wオプションをつけてください。」
と書いてあったのですが
Borlandのヘルプを色々検索したのですが
どこでその設定を変えるのか分からなく
解決できない状態になっています

どなたか解決方法わからないでしょうか?
宜しくお願いします
0844デフォルトの名無しさんNGNG
スレ違いだクソボケ

タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/
0845デフォルトの名無しさんNGNG
>>843
今まで:bcc32 hoge.c
この先:bcc32 -W hoge.c
0846デフォルトの名無しさんNGNG
>>844
すみませんでした
向こうに書こうと思ったのですが
向こう16日ぐらいから書き込みが無いので
こっちに書いてしまいました

>>845
ありがとうございます
ーWをコンパイルするとき挟んであげれば良いんですね。

スレ汚し申し訳ありませんでした
0847デフォルトの名無しさんNGNG
>>845
試したところ
無事出来ましたありがとうございました
0848デフォルトの名無しさんNGNG
struct pos{
int x;
int y;
}:
↑の構造体で定義したpをstlのvectorに入れたい場合どうしたらよいでしょうか。
練習としてVCでコンソールアプリを作ってみているのですが、書き方が分かりません。
cout<<"xの値を入力"<<endl;
cin>>p.x;///←エラー
:
のような感じで10個ほど列(要素?)を追加していって
構造体配列の様にして、最後に表示してみたいのですが。。。
0849デフォルトの名無しさんNGNG
>>848
最低一冊は入門書を読みましょう

エラーメッセージは?
それとposの定義の最後のコロンはセミコロンが正解だよ
0850デフォルトの名無しさんNGNG
それ言ったら全部それで済むやん
0851デフォルトの名無しさんNGNG
>>848
cin>>p.at(XX).x;
ではないのと、遠回しに言ってみるテスト
0852デフォルトの名無しさんNGNG
>>837
全角な上に綴り違いなのはネタ?
まぁ、漏れもRubyは使うけど、
C/C++とは比較対象にはならんな。
0853デフォルトの名無しさんNGNG
こんなアホ過ぎるエサで釣られる馬鹿初めて見たw
0854Ruby >>>>>>>>>>>>> C++NGNG
http://web.archive.org/web/20000302001334/http://www.ruby-lang.org/ja/compar.html
--------------------------------------------------------------------------

C++
いろいろと有名なオブジェクト指向言語であるC++とRubyを比較すると:


C++なぞ問題外.^^;;;

--------------------------------------------------------------------------
0855デフォルトの名無しさんNGNG
HSP 「21世紀にこんな言語はないだろう」 by まつもとゆきひろ

Perl 「Perlユーザは臭い」 by るびきち

Java 「Javaなんてうんこ」 by kitaj

C++ 「C++なぞ問題外.^^;;;」 by オフィシャルサイト

Ruby 「Rubyこそ最高言語」 by Rubyユーザ一同
0856デフォルトの名無しさんNGNG
>>854
それはジョークだよ。馬鹿?
0857デフォルトの名無しさんNGNG
http://web.archive.org/web/20000303064314/www.ruby-lang.org/en/compar.html
Let's compare other languages with Ruby.
We take up Perl, Python, Tcl, Java, Eiffel and C++.
This is based on our own judgment and biased view, however, it does not intend to spread fibs.
----snip--
C++
C++ is famous OOPL in many places. Now, let's compare C++ with Ruby:


Ruby is too good to compare ;-)

ジョークですか。そうですか。
0858848NGNG
>>851
atっていうのは中身を取り出すやつじゃないんでしょうか?
調べても単純なintの場合とかしか載ってなくて構造体の場合の書き方が。。。
0859デフォルトの名無しさんNGNG
851だけどごめんよ良く読んでなかった。
std::vector<pos> vec;
for(…){…
vec.push_back(p);
}
for(i=0…){…
cout<<vec[i].x;
}
を求めてるのかな?ふつーに参考書に載ってると思われ
ってゆうか載ってなかったらその本捨てておしまい。
0860デフォルトの名無しさんNGNG
int* p;
int main (){
  p = new int[1000]
  for(int i=0; i<1000; i++)  p[i]++;
}
とするより
int main (){
  int* p = new int[1000];
  for(int i=0; i<1000; i++)  p[i]++;
}
としたほうが処理速度が速くなる理由はなぜでしょうか?
VCでリリースビルドした結果
mov  ecx,dword ptr ds:[418C34h]
inc   dword ptr [eax+ecx]
と
inc   dword ptr [eax]
のようになっていましたが全然わかりません
0861デフォルトの名無しさんNGNG
>>858
at(n)はn番目の要素のある位置、つまりそこへの参照を返す。

>>860
pが後者ではレジスタ変数になっているように見える。
0862デフォルトの名無しさんNGNG
// C++のファイル入出力ストリームについてなんですが

typedf struct ABC{ char a; int b; double c; };
ABC abc;

ifstream fin;
fin.open(filename, ios::binary);

// ここでabcにfinでopenしたファイルからABC型のバイナリデータを読み込みたい

fin.close();


// どうすりゃいいんでしょうか…
// Cだとfread(&abc, sizeof(ABC), 1, fp);ですよね…
// 環境はVC++.NETです
0863デフォルトの名無しさんNGNG
read
0864デフォルトの名無しさんNGNG
やはりreadですか…ありがとうございます。

ついでで申し訳ないんですが、そいつに渡す引数はどうすればいいでしょうか、、
0865838NGNG
難しくてもいいからとりあえずメールを送ったりする
サンプルソースありませんか...
0866デフォルトの名無しさんNGNG
msdn
0867デフォルトの名無しさんNGNG
オープンソースのメールソフトなんかいっぱいあるだろうに
0868デフォルトの名無しさんNGNG
>>865
メールの送信にはSMTP、
受信にはPOPというプロトコルを使う。
とりあえずPOPについて分かりやすいページとしては
↓これなんかオススメ
http://x68000.q-e-d.net/~68user/net/

これはアプリケーション層の説明しかないみたいだけど、
下位層のプロトコルはWininetとかのライブラリを使って解決するだけだから説明は略。
0869デフォルトの名無しさんNGNG
>>861
レジスタ変数をよく理解していませんが確かにレジスタ1個でアドレッシングしているようです
一方グローバル変数のほうはp+オフセットという形で行っているようです
たまたまVCがそう最適化しただけで、C++一般の常識的な問題ではないのなら気にしないでおきます
0870デフォルトの名無しさんNGNG
>>862の
// ここでabcにfinでopenしたファイルからABC型のバイナリデータを読み込みたい
には結局何を打ち込めばいいんでしょうか・・・

msdn開いても理解できませんでしたorz
0871デフォルトの名無しさんNGNG
>>865
sylpheed
kmail
辺りのソースをあたるとか
0872デフォルトの名無しさんNGNG
>>869
グローバル変数にすると、マルチスレッドの場合を考慮して
pを参照しようとするたびにメモリからpの値をReadするようになってる。
別のスレッドが、いつpの値を書き換えてしまうか分からないから。

関数のローカル変数ならそういう心配はないので
レジスタに割り当てることができ、処理速度が速くなる。
0873デフォルトの名無しさんNGNG
質問よろしいでしょうか。
キーを押し "続けて" いるにも関わらず、OnKeyDown() が何度も呼び出されます。
エディタ上などでの、文字入力中の処理を考えると自然な気もしますが、
これをやめ、キーを押し続けても、最初の1度のみ OnKeyDown() を呼び出させる方法はないでしょうか?
0874デフォルトの名無しさんNGNG
OnKeyUp()
0875デフォルトの名無しさんNGNG
OnKeyUp() で実現できるでしょうか?
キーを押し続けている間、WM_KEYUP は起きないと思うのですが……。
0876デフォルトの名無しさんNGNG
どんな押し方をしてもボタン押下1回につき1度呼ばれる。
駄目ですか?
0877デフォルトの名無しさんNGNG
>>875
初回のOnKeyDownでフラグを立て
フラグが立ってる間、OnKeyDownは無視
OnKeyUpでフラグをおろせばいいんじゃない?
0878デフォルトの名無しさんNGNG
押し続けると、OnKeyDown() が何度も呼ばれてしまいます。
0879デフォルトの名無しさんNGNG
>>877
ああ、全くその通りです(゚Д゚;)
ありがとうございます。
0880デフォルトの名無しさんNGNG
むしろそういう場合、非同期のキー状態取得APIを使うべきじゃないだろうか…
0881デフォルトの名無しさんNGNG
サブ関数内で変数を宣言し、サブ関数から抜け出した後には宣言した変数はメモリから消えてますか?それともちゃんとfree()で開放しなければいけない?
0882デフォルトの名無しさんNGNG
いまいち質問の意味が分からないけど…

void foo( ) {
    char *p;
    p = (char*)malloc(100);
}

関数 foo を抜けたとき、
p は消えるけど p が指していたメモリは消えない。
free しなきゃだめ。
0883デフォルトの名無しさんNGNG
VC++でもJavaやその他の言語と同様
APIなどいくつか用意されていると思いますが
どういう関数があるのとかどこで調べればいいのでしょうか?
0884デフォルトの名無しさんNGNG
>>883
MSDN
0885860NGNG
>>872
なるほど。よくわかりましたありがとうございます!
0886デフォルトの名無しさんNGNG
>>882
レスありがとうございます。宣言した変数は消えるんですね。こういうメモリの動きを見るソフト・機能とかあるんでしょうか?
0887デフォルトの名無しさんNGNG
>>886
見なくて済むようにするためのGC
0888デフォルトの名無しさんNGNG
質問すいません。(;´Д`)
列挙型で、

enum Hoge{
 Hoge1 = 0,
 Hoge2,
 Hoge3,
};

・・・の時、{Hoge1,Hoge2,Hoge3}を{0,1,2}という整数に変換する事はできるんですが、
その逆に{0,1,2}から{"Hoge1","Hoge2","Hoge3"}というふうに列挙子を
文字列として取得する方法はないのでしょうか?よろしくお願いします。
0889デフォルトの名無しさんNGNG
出来ない。
自分で関数作るなりすれ。
0890デフォルトの名無しさんNGNG
>>886
ローカル変数はスタック上に作られて関数を抜けた時点でなくなる
0891デフォルトの名無しさんNGNG
>>888
std::mapにでもかちこんどけ。
0892デフォルトの名無しさんNGNG
質問です。
#include <iostream>
#include <string>
int main(void){
std::string str("abcde");
const char* p=str.c_str();
int len=0;
while(p!='\0'){
p++;
len++;
}
std::cout<<len<<std::endl;
return 0;
}

このコードで、whileループが終わらないのですがどうしてなんですか?
str.c_str()は¥0で終わる文字列を返すので、ループが終わらないのは
おかしいと思ったんですが。。
コンパイラはBorland C++ compilerを使いました。
0893デフォルトの名無しさんNGNG
s/while(p!='\0'){/while(*p!='\0'){
0894888NGNG
>>889 >>891
ありが�d。
mapで逝かせていただきまつ。
0895892NGNG
うう、893さんありがとう
恥ずかしい限りですorz
0896デフォルトの名無しさんNGNG
どうでもいいがsageろと
0897デフォルトの名無しさんNGNG
while(p!='\0'){
p++;
len++;
}
…どうでもいいことだが格好が…
while (*p++) ++len;
0898デフォルトの名無しさんNGNG
C言語を始めて1ヶ月目です。よろしくお願いします。
質問です。

8bitの2進数を左右反転させたいのですが手法が分かりません。

11111101→10111111

シフトレジスタ>>,<<
論理積&
論理和|
排他的論理和^

等を使えばいいのでしょうか?
0899デフォルトの名無しさんNGNG
テスト中に代入文を埋め込むと読みにくいからやめれといわれますが,
皆さんはどうしてますか?
多用していますか?
なるべく排除しようとしていますか?
0900デフォルトの名無しさんNGNG
遠慮なしに使います
0901デフォルトの名無しさんNGNG
>テスト中に代入文を埋め込むと読みにくいからやめれといわれますが,

意味不明
0902デフォルトの名無しさんNGNG
わけわからん
0903デフォルトの名無しさんNGNG
>>901
hoge = function();
while (hoge != 0)

を

while ((hoge = function()) != 0)
と書くこと
0904デフォルトの名無しさんNGNG
>>901
補足
hoge = function();
while (hoge != 0) {
 doSomething();
 hoge = function();
}

を

while ((hoge = function()) != 0)
 doSomething();
と書くこと
0905デフォルトの名無しさんNGNG
if (Base* b = dynamic_cast<Base*>(d))
とか?簡潔で分かりやすいじゃん
0906デフォルトの名無しさんNGNG
>903 はアフォ

>904
どー考えても 下の方が理解しやすいと思うんだが違うのか、お気の毒.
あえて上の書き方してるとしたら氏ね
0907デフォルトの名無しさんNGNG
while (hoge = function())
 doSomething();
0908デフォルトの名無しさんNGNG
特に、C++ に多いと思うんだが、
if (xxx)
{

}
else
{

}

while (1)
{

}
この形のインデントが増えてないか?

俺はK&Rスタイルを貫いているが。
if (1) {

} else {

}

while (1) {

}
どっちでもいいといえば、どっちでもいいが、ちょっと疑問に思ったので。
0909デフォルトの名無しさんNGNG
>この形のインデントが増えてないか?

別に
0910デフォルトの名無しさんNGNG
>>908
俺は最初前者から入って、今は後者
0911デフォルトの名無しさんNGNG
俺はずっと前者。ブロックであること、オブジェクトのlifetimeが
明示しやすいから。
正直読めれば他人の書くコードはどうでもいいが。
0912デフォルトの名無しさんNGNG
#include <stdio.h>

void hoge(int *a);
int main()
{
int a;

hoge(&a);
printf("%d\n" , a);

}
void hoge(int *b)
{
b++;
if (b>5)
{
return;
}

hoge(b);

}

上のプログラムだと
error C2040: '>' : 'int *' は 'int' と間接操作のレベルが異なります。
error C2446: '>' : 'int' 型から 'int *' 型への変換ができません。
というエラーがでます

aの値が6になったか確認したいのですけどどうしたらいいのでしょうか?
0913デフォルトの名無しさんNGNG
b++ → *b++
if (b>5) → if(*b > 5)
そもそも未初期化の変数を使うなと
int a = 0; とでもしとき
0914913NGNG
(*b)++ だったorz
0915デフォルトの名無しさんNGNG
void hoge(int *b)
{
(*b)++;
if (*b > 5) return;
hoge(b);
}
0916915NGNG
orz
0917デフォルトの名無しさんNGNG
>>913
ご返答ありがとうございます
エラーはでなくなったのですけど
aの値が6になってないのですが
hoge内のbの変化がaにも適応されるようにしたいんですけど
どうしたらいいのでしょうか?
0918デフォルトの名無しさんNGNG
>>914
>>915
ありがとうございます
ちゃんとaが6になるようになりました
0919デフォルトの名無しさんNGNG
#include <stdio.h>
void hoge(POINT *b );
int main()
{
POINT a;
a.x=0;
a.y=0
hoge(&a);
printf("%d\n" , a.x);
}
void hoge(POINT *b)
{
(*b->x)++;
if (*b->x>5) return;
hoge(b);
}
でerror C2065: 'b' : 定義されていない識別子です。
と: error C2065: 'POINT' : 定義されていない識別子です。
とerror C2182: 'hoge' : 'void' 型が不適切に使用されています。
というエラーがでました
なぜでしょうか?
VC++.netです
0920デフォルトの名無しさんNGNG
>>919
(゚Д゚)…

一度入門書を読んで来た方がいいんじゃないか?
0921デフォルトの名無しさんNGNG
>>920
ネットの入門HPで勉強中なんです
0922デフォルトの名無しさんNGNG
まずPOINTという構造体を作る必要があるのと、
(*b).x は b->x と同義であることを理解してるか?
0923デフォルトの名無しさんNGNG
>>922
>>919でa.まで書くと自動的にxとyの候補が表示されるので
すでにどこかでPOINTが定義されてるのかなと思ってました
>(*b).x は b->x と同義であることを理解してるか?
知りませんでした
0924デフォルトの名無しさんNGNG
>>923
どこかで定義されているのは正しい(windef.hだったかな?)が、
その定義をincludeしていないでしょう。

VC++は直接includeしていなくてもインテリセンスが働く悪い癖がある。
0925デフォルトの名無しさんNGNG
>>924
#include <stdio.h>以外インクルードしてません
>VC++は直接includeしていなくてもインテリセンスが働く悪い癖がある。
初心者にとっては便利な機能みたいですねw
0926デフォルトの名無しさんNGNG
>>925
初心者にとってはよくない機能だと思われ
0927デフォルトの名無しさんNGNG
>>898

src = 0xfd;

dst = (src & 0x80) >> 7 +
    (src & 0x40) >> 5 +
    (src & 0x20) >> 3 +
    (src & 0x10) >> 1 +
    (src & 0x08) << 1 +
    (src & 0x04) << 3 +
    (src & 0x02) << 5 +
    (src & 0x01) << 7;

これでどうだw
0928デフォルトの名無しさんNGNG
inline unsigned char invert(unsigned char x)
{
    x = (0xF0 & x << 4) | (0x0F & x >> 4);
    x = (0xCC & x << 2) | (0x33 & x >> 2);
    x = (0xAA & x << 1) | (0x55 & x >> 1);
    return x;
}

だっけ。まぁ、8bit程度だとあんま意味ないが。
0929デフォルトの名無しさんNGNG
配列変数a[i]のiを得るにはどうすればいいですか?
たとえばa[0]〜a[9]のうちの最大のものがa[3]とするとmax=3としたいとか。
0930デフォルトの名無しさんNGNG
他スレに誤爆してしまった…けど一応書き
>>898
unsigned char a = 0xF2; //反転させたいビット列 (入力)

unsigned char HANTEN(unsigned char a){
unsigned char b = 0x01;
unsigned char work =0, out =0;
for(int i=0; i<=7; i++){
work = a & b;
work << (7 - i);
out = out | work;
b << 1;
}
return out;
}

下位から1bitずつ取り出してその分シフト、orで足し算、と。
取り出したビットがゼロだったら飛ばしてもいいかも。

>>987-928と比べたらメリットは、他の変数型への移植性くらいしかないけど
0931デフォルトの名無しさんNGNG
すまん、なんか間違えてる

b << 1;を削除して
a >> 1;で
0932デフォルトの名無しさんNGNG
ループなんぞするなら、
template<typename T>
inline T tinvert(T t){
    T x = T();
    for (T m = 1; m; m <<= 1)
        x = (x << 1) + (t & m ? 1 : 0);
    return x;
}

のほうがよくないか。
0933デフォルトの名無しさんNGNG
>>929
max=&(a[3])-a;
0934デフォルトの名無しさんNGNG
max=(maxの型)(&(a[3])-&(a[0]))
0935デフォルトの名無しさんNGNG
>>933
>>934
どーもです。
0936デフォルトの名無しさんNGNG
VC++ 6.0 で質問です。
Debug モードではコンパイルが通ったのですが、Release モードにすると、
〜\hogehoge.h(12) : fatal error C1083: インクルード ファイルがオープンできません。'aaaa.h': No such file or directory
とエラーがでました。
aaaa.h は外部から追加したヘッダファイルのため、パスが通ってないと考えたのですが、
Debug と Release でなぜ違いがでるのかが分かりませんでした。
よろしくお願いします。
0937デフォルトの名無しさんNGNG
>>936
プロジェクトの設定は、Debug と Release モードで別々なんだよ。
Release モードの C/C++ コンパイラ オプションでも
/I オプションを追加するといい。
0938デフォルトの名無しさんNGNG
ヌヌネネヌヌネノ
(中略)
(゚∀゚) ruby!!
0939デフォルトの名無しさんNGNG
Rubyのためなら死ねる
0940デフォルトの名無しさんNGNG
>>938,939
君らの行為がRubyの評価を下げている
Rubyのためにも逝ってくれ
0941デフォルトの名無しさんNGNG
罵倒されそうな事を質問、多分合ってはいると思うんだが自信無いので(;´Д`)

|と+の違いって、キャリーがあるかないかだよな?
1+1は2で、1|1は1?
それを利用したら、配列に入った全ての値が同じか否か検出出来る?
0942941NGNG
補足
配列の[0]に入ってた値を保存して、各値とのorをとって同一かどうかで検出出来る?
0943デフォルトの名無しさんNGNG
よくわからんが、2値のXOR取って0であれば同一、not 0なら違う値
0944モウモウNGNG
>>942
できるわけない。よく考えてみよう。
単純に == で比較するのじゃ不満なのかい?
0945デフォルトの名無しさんNGNG
>943、944
thx、よく考えたら無理ですた。
ループで同等比較するしかないのか、めんどいナァ………。
0946デフォルトの名無しさんNGNG
半分どうしでstrcmpなんか使って同等比較して、
その半分の更に半分同士をstrcmpで同等比較

…の2段階じゃダメかなぁ。
どこかに違う値入ってたら引っかかると思うんだけど

思いつきなんで間違ってたら「こいつアホだ」とでも何とでも…
0947デフォルトの名無しさんNGNG
と、レスしたそばから…
12121212みたいに入ってると通ってしまうことに気づいた

やっぱ俺はアホだ!
0948デフォルトの名無しさんNGNG
おめでとう
0949デフォルトの名無しさんNGNG
strcmpだって内部ではループ使ってるんだから、
普通にループで書いた方が賢明な気がする。

ループを書くのはカッコワルイ、とかいう理由なら別だけど
0950デフォルトの名無しさんNGNG
#include <algorythm>
0951リズムに乗ってNGNG
     ♪  Å
   ♪   / \   ランタ タン
      ヽ(´Д`;)ノ   ランタ タン
         (  へ)    ランタ ランタ
          く       タン



   ♪    Å
     ♪ / \   ランタ ランタ
      ヽ(;´Д`)ノ  ランタ タン
         (へ  )    ランタ タンタ
             >    タン

と思ったけど、rhythm でもないじゃないか…
0952デフォルトの名無しさんNGNG
#include <algorithm>
      ○| ̄|_
0953デフォルトの名無しさんNGNG
最初は良く間違えるからキニスンナ
0954デフォルトの名無しさんNGNG
釣りかとしか思ってなかった
0955デフォルトの名無しさんNGNG
正直C++なんてなにもわかんないのに始めるんですが、stdioとiostreamどっちやろうか悩んでるので
こっちはコレ系に強い、とかありませんか?それともたいていどっちもやるとか、片方やればどっちもわかったりするんですか?
0956デフォルトの名無しさんNGNG
>>955
両方やれ。
0957デフォルトの名無しさんNGNG
>>955
stdio.hもしくはcstdioで定義されているものはレガシー関数といわれています。
あまり使うべきではありません。
0958デフォルトの名無しさんNGNG
C/C++が初めてなら素直にCでprintfつかっとけ
0959デフォルトの名無しさんNGNG
C++ のストリームって、あんまり使い勝手いいと思わないよな。
0960デフォルトの名無しさんNGNG
stdio -> 拡張性無し、型非安全、熟知、早い
iostream -> 拡張性有り、型安全、stdio より遅いことがほとんど
0961デフォルトの名無しさんNGNG
>>960
printf()はとても重いし遅いけれど。
0962デフォルトの名無しさんNGNG
cout よりマシなのでは?
0963デフォルトの名無しさんNGNG
入力チェックができるのでscanf使うくらいならcinのほうがいいとは思うが
それ以外はどっちも同じようなものなのがなぁ・・・
0964デフォルトの名無しさんNGNG
iostreamで書式を指定するのは激しくめんどくさい
0965デフォルトの名無しさんNGNG
>>962
確かにそうだね。
昔の話だけれど、実際使うときはprintfを自作していたよ。
0966デフォルトの名無しさんNGNG
コンソールはほとんど使わないし
sprintfとかCString::Formatとか書式の方をよく使うから
0967デフォルトの名無しさんNGNG
へぇ
0968デフォルトの名無しさんNGNG
せめてsnprintf使えよ
0969デフォルトの名無しさんNGNG
なんかこの話の流れ Déjà vu?
0970デフォルトの名無しさんNGNG
誰もが好きなお話ってことよ
0971デフォルトの名無しさんNGNG
これからCかC++を学ぼうと思うんですがどちらがお勧めですか?
また、開発環境はどれが扱いやすいですか?
0972デフォルトの名無しさんNGNG
C++
禿も推奨
0973デフォルトの名無しさんNGNG
>>971
いきなり開発環境はいらんからフリーのコンパイラつかって
とりあえずCでもC++でもいいから入門書を一冊仕上げろ。
入門書は安いのは役に立たんから値は張っても定評のあるのにしろ。
C++ならダイテルかPrimerか。Cは俺は知らん。
0974デフォルトの名無しさんNGNG
とりあえず使うOSぐらい書かんと処理系についてはアドバイスのしようがないが。
0975デフォルトの名無しさんNGNG
Rubyにします。
0976971NGNG
OSはXPPROを使ってます

>>973
ありがとうございます。
アマゾンで調べたところ、いろいろ種類がありました。
基本的に、ダイテルの本を買っていって順に学んでいくのかPrimerの本を買っていって順に学んでいくかは好みで選んでも問題ないでしょうか?
0977デフォルトの名無しさんNGNG
あるtemplateクラスがあって、それを継承してtemplateで
ないクラスを作成することができるのでしょうか?
0978デフォルトの名無しさんNGNG
>>977
class A : public TemplateClass<ほげ>
{};
0979デフォルトの名無しさんNGNG
Ruby!
0980デフォルトの名無しさんNGNG
猫でもわかるのSDK編のサンプルは.NET2003だとそのままでは
動かないんすか?
0981デフォルトの名無しさんNGNG
著者に聞けよ
0982デフォルトの名無しさんNGNG
最近そういうページだけで覚えようとするヤツが多いみたいだけど
最低限の本ぐらい買って読めよ、と思う
0983デフォルトの名無しさんNGNG
0984デフォルトの名無しさんNGNG
fgetsでファイルから読み込んだ時にデータが長すぎて読みきれずに
バッファに残ってしまったデータのクリアのやり方がわかりません。
おしえてください。
0985デフォルトの名無しさんNGNG
やっぱネットで勉強するより本買ったほうがいいんすか?
0986デフォルトの名無しさんNGNG
>>984
ファイルから読み込んでるならクローズすればいい。
標準入力から読み込んでるなら読み捨てるロジックを書けばいい。
0987デフォルトの名無しさんNGNG
>>985
画面見ながら勉強するのは21インチモニターなどで画面分割しながら
やらないと苦しい。それかページを印刷してしまうかだね。

俺は本を買った方が絶対に良いと思う。
0988デフォルトの名無しさんNGNG
新スレ
http://pc5.2ch.net/test/read.cgi/tech/1101100031/
0989デフォルトの名無しさんNGNG
>fgetsでファイルから読み込んだ時にデータが長すぎて読みきれずに
>バッファに残ってしまったデータのクリアのやり方がわかりません。

読みきれなかったデータはバッファではなくファイル側にある。
0990984NGNG
>>986さん
即レスありがとうございます。
標準入力の場合はgetcharで空読みをしてできたのですが
ファイル入力の場合でも同じような事は出来ませんか?
次の行も読み込まなくてはいけないので。
0991デフォルトの名無しさんNGNG
>>990
fgetc()で読み捨てるか、fgets()で読み捨てる。
0992984NGNG
1〜10まで質問してもうしわけないのですが
fgetsで読み捨てるとしたら具体的にはどうしたらいいんでしょうか。
0993デフォルトの名無しさんNGNG
>>992
/* fgetc()を使った読み捨て関数。 */
void readAndThrow(FILE * fp)
{
 int rtn;
 do {
  rtn = fgetc(fp);
 } while (rtn != '\n' && rtn != EOF);
}
#if 0 /* 使用例 */
while (fgets(buf, sizeof(buf), fp)) {
 if (strchr(buf, strchr('\n') == NULL) {
  readAndThrow(fp);
 }
 /* ... */
}
#endif
0994992NGNG
>>993さん
ありがとうございます。できました。
0995デフォルトの名無しさんNGNG
...
0996デフォルトの名無しさんNGNG
readAndThrough ではないかと
0997デフォルトの名無しさんNGNG
読み捨てだから、読んで投げ捨てたんだろ。
0998デフォルトの名無しさんNGNG
getsだぜ! パワフル魂!
0999デフォルトの名無しさんNGNG
埋め
1000デフォルトの名無しさんNGNG
はい、1000。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。