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

【初心者歓迎】C/C++室 Ver.9【環境依存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/ (html化待ち)
6:http://pc5.2ch.net/test/read.cgi/tech/1082182233/(html化待ち)
7:http://pc5.2ch.net/test/read.cgi/tech/1086373839/(html化待ち)
8:http://pc5.2ch.net/test/read.cgi/tech/1091264964/l50

【ラウンジ】質問、回答が長い時はココを使うと見やすい
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

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

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

C++Builder相談室 Part10
http://pc5.2ch.net/test/read.cgi/tech/1089299158/l50

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

タダで使える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
0003デフォルトの名無しさんNGNG
【関連スレ(その他)】
C言語なら俺に聞け! Part 90
http://pc5.2ch.net/test/read.cgi/tech/1094025471/l50

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

C/C++の宿題を片づけ作戦指令 30代目
http://pc5.2ch.net/test/read.cgi/tech/1091954342/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
0004デフォルトの名無しさん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
0005デフォルトの名無しさんNGNG
>>1
乙
0006前スレ976NGNG
>>990
>処でこの問題の場合、「手」をクラス化しました。
>しかし、コンピュータの手とオペレータの手を纏めてしまったために
>オペレータ同士の対戦にしたりコンピュータ同士の対戦にすることができません。
>このような改修に耐えられるように手はそれぞれ独立したオブジェクトとして扱えた方が面白いでしょうね。
言われたとおりに、それぞれの「手」を独立した形にしてみました。
が、やっぱりどうもゴチャゴチャしている様な気がします。。。
宜しければマズイ箇所などがあればご指摘の程をお願いします。
enum mode{ player_vs_comp = 0, player_vs_player = 1, comp_vs_comp = 2, };
enum judge{ win2 = 0, win1 = 1, even = 2, };

class cte{
protected:
  int m_type;
  bool m_playertype;
public:
  void select(void){
    if(m_playertype){
      cout << "player select ";
      m_type = getch() - 0x31; if(m_type > 2){ m_type = 2; }
      cout << endl;
    }else{
      cout << "comp select " << endl;
      m_type = rand() % 3;
    }
  }
  int type(void){ return m_type; }
  void playertype(bool playertype){ m_playertype = playertype; }
  cte(){ m_type = 0; }
  ~cte(){}
};
0007前スレ976NGNG
class cjanken{
protected:
  string m_typestr[3];
  judge m_judgelst[3][3];
public:
  void mode(cte &te1, cte &te2){
    switch(getch() - 0x31){
      case player_vs_comp: te1.playertype(true); te2.playertype(false); break;
      case player_vs_player: te1.playertype(true); te2.playertype(true); break;
      case comp_vs_comp: te1.playertype(false); te2.playertype(false); break;
    }
  }
  void select(cte &te1, cte &te2){
    te1.select();
    te2.select();
  }
  void show(cte &te1, cte te2){ cout << m_typestr[te1.type()] << " vs " << m_typestr[te2.type()] << endl; }
  judge check(cte &te1, cte &te2){ return m_judgelst[te1.type()][te2.type()]; }

  cjanken(){
    srand((unsigned int)time(NULL));
    m_typestr[0] = "グー"; m_typestr[1] = "チョキ"; m_typestr[2] = "パー";
    m_judgelst[1][2] = m_judgelst[2][0] = m_judgelst[0][1] = win1;
    m_judgelst[0][0] = m_judgelst[1][1] = m_judgelst[2][2] = even;
    m_judgelst[2][1] = m_judgelst[0][2] = m_judgelst[1][0] = win2;
  }
  ~cjanken(){};
};
0008前スレ976NGNG
int main(void)
{
bool flag = true;
cjanken janken;
cte te[2];

  cout << "1 = player vs comp, 2 = player vs player, 3 = comp vs comp\n" << endl;
  janken.mode(te[0], te[1]);
  
  cout << "グー = 1, チョキ = 2, パー = 3" << "\n" << endl;

  while(1){
    cout << "ジャンケン... " << endl;
    janken.select(te[0], te[1]);
    cout << "ポン !" << endl;
    janken.show(te[0], te[1]);

    switch(janken.check(te[0], te[1])){
      case win2: cout << "win2!\n" << endl; break;
      case win1: cout << "win1!\n" << endl; break;
      case even: cout << "even\n" << endl; break;
    }

    cout << "retry? y/n";
    if(getch() != 'y'){ break; }
    cout << "\n" << endl;
  }

  return 0;
}
0009デフォルトの名無しさんNGNG
>>8
class JankenHand {
public:
 enum Mode { MANUAL, AUTO };
 enum Te { GU, TYOKI, PA, RANDOM };
 enum Judgement { WIN_1, WIN_2, EVEN };

 static Judgement Judge(const JankenHand& player_1, const JankenHand& player_2) {
  Te t1 = player_1.get(), t2 = player_2.get();
  if( t1==t2 ) return EVEN;
  else if( (t1 == GU && t2 == TYOKI) || (t1 == TYOKI && t2 == PA) || (t1 == PA && t2 == GU) ) return WIN_1;
  else return WIN_2;
 }
 JankenHand(Mode mode = AUTO) : mode_(mode), te_(GU) { srand((unsigned int)time(NULL)); }
 void select() {
  if( mode_ == AUTO )
   te_ = static_cast<Te>(rand() % 3);
  else {
   cout << "ジャンケン... " << endl;
   te_ = static_cast<Te>(getch() - '1');
  }
 }
 Te get() const { return te_; }
 const char* show() const {
  static char* str[] = {"グー", "チョキ", "パー"};
  return str[te_];
 }
private:
 Mode mode_;
 Te te_;
};
0010デフォルトの名無しさんNGNG
int main(int argc, char* argv[])
{
 cout << "1 = player vs comp, 2 = player vs player, 3 = comp vs comp\n" << endl;
 int mode = getch() - '0';
 JankenHand p1(mode == 3 ? JankenHand::AUTO : JankenHand::MANUAL),
         p2(mode == 2 ? JankenHand::MANUAL : JankenHand::AUTO);

 cout << "グー = 1, チョキ = 2, パー = 3" << "\n" << endl;
 for(;;) {
  p1.select(); p2.select();
  cout << "ポン !" << endl;
  cout << "player_1=" << p1.show() << " player_2=" << p2.show() << endl;
  switch( JankenHand::Judge(p1, p2) ) {
   case JankenHand::WIN_1: cout << "win1!\n" << endl; break;
   case JankenHand::WIN_2: cout << "win2!\n" << endl; break;
   case JankenHand::EVEN: cout << "even\n" << endl; break;
  }

  cout << "retry? y/n";
  if( getch() != 'y') break;
  cout << "\n" << endl;
 }

 return 0;
}
0011旅人達 ◆ahGjnhNBTw NGNG
>>1
乙です
0012デフォルトの名無しさんNGNG
>>10
おれだったらこんな感じ
#include <iostream>
#include <map>
#include <string>
using namespace std;

void Play(int l, int r)
{
  enum janken{ goo = 0, choki, pahh};
  static map<int,string> gjmap;
  gjmap[goo] = "ぐー";
  gjmap[choki] = "ちょき";
  gjmap[pahh] = "ぱー";

  enum judge{ lose=0, win, even };
  static int judge_map[3][3] = {{even,win,lose},{lose,even,win},{win,lose,even} };

  switch(judge_map[l][r])
  {
  case win:
    cout<<gjmap[l]; break;
  case lose:
    cout<<gjmap[r]; break;
  case even:
    cout<<"Draw"<<endl; return;
  }
  cout<<" winner"<<endl;
}
0013デフォルトの名無しさんNGNG
>>続き

int main()
{
  int r,l;
  cout << "グー = 0, チョキ = 1, パー = 2" << "\n" << endl;

  while(cin>>r>>l)
    if(r>=0 && r<3 && l>=0 && l<3) Play(r,l);
    else cout<<"なめきっとのかーコラー。お前、ひん剥いて、写真とって校内に晒すぞ!"<<endl;
  return 0;
}
0014デフォルトの名無しさんNGNG
gjmapのgは気にしないでくれ
0015デフォルトの名無しさんNGNG
strA[128][256];
strB[128][256];
という二つの文字列配列があるとして、
strAのLA列目のNA文字目を
strBのLB列目のNB文字目にコピーするにはどうしたらいいですか?
001615NGNG
すいません、書き忘れましたが普通のcharの文字列です。
0017デフォルトの名無しさんNGNG
strB[LB][NB]=strA[LA][NA];
0018デフォルトの名無しさんNGNG
MFCで、2D描画が上手く行かずに困ってます

http://www.athomejp.com/goldfish/mfc/cobject/jpegview.asp
ここを参考に、ダイアログに描画はできてますが、
SDIで、同じ方法をもちいりましたが、view領域(?)に描画ができません

わかる人おしえてください
0019旧979NGNG
全スレ、>> ttp://pc5.2ch.net/test/read.cgi/tech/1091264964/979 です。
>> ttp://pc5.2ch.net/test/read.cgi/tech/1091264964/991
>> ttp://pc5.2ch.net/test/read.cgi/tech/1091264964/986
typeof演算子というのですね。
C#とか、.Netとかが出てくる辺り、新しい事項っぽいですね。
勉強になりました。
ありがとうございました。
0020デフォルトの名無しさんNGNG
>>19
コンパイラによってはサポートしてたりします.
g++とか.検索してたら,どうやらVC++もそうなのかな?
0021前スレ976NGNG
おおっ、色々コードをどうもです。

>>9
ずいぶんスッキリしましたね。
手のチェックメソッド(この場合judge())を手自体のstaticメソッドにしてるんですか。
ハッキリ言って僕のcjankenクラスは不要でしたね。。。

>>12
今回はそれぞれの「手」を独立したオブジェクトにしてのプログラムという事だったので。。。
でも、mapを使うのはより象徴的になってよさげですね。

やはり、人の書いたコードを見るのは勉強になります。
色々なご意見ありがとうございました。
002219NGNG
>>20
ありがとうございます。
VC++がサポートしているかもというのは、うれしい情報です。
Spokeを買えるお年頃なので、買ってみようかなと考えていたところです。
0023デフォルトの名無しさんNGNG
stlのvectorで vector< vector< int > >のように二次元配列として使用しています。
この配列の全要素に一括で同一の値を代入することってできますか?
今のところ、ループを回して逐次代入しているのですが。
0024デフォルトの名無しさんNGNG
>>23
#include <vector>
#include <algorithm>
void fill( std::vector< std::vector< int > >& v , int value )
{
 std::fill( v[0].begin() , v[0].end() , value );
 std::fill( v.begin() + 1 , v.end() , v[0] );
}

前提として
・!v.empty()
・v[0]〜v[v.size()-1] の全ての size() が v[0].size() と同じ(または処理後同じになってもいい)
ということが必要。

v.begin()〜v.end() のループを自前で回すと、
パフォーマンスを上げることができるかも知れない。
0025デフォルトの名無しさんNGNG
Cの標準関数で文字列の差分を取得するにはどうしたらいいでしょうか。
例えばabcdefgとabcdを比較したらefgと帰ってくるようにしたいです。

もしくは、PHPでいうところのsubstrのような
文字列の〜文字目から〜文字目までを返すような関数ってないでしょうか。
0026デフォルトの名無しさんNGNG
std::string::substr
002725NGNG
std使わないで何とかなりませんでしょうか…
0028デフォルトの名無しさんNGNG
>v[0]〜v[v.size()-1] の全ての size() が v[0].size() と同じ(
n×mの単純な長方形的になっていれば良いということですね。問題ありません。

>v.begin()〜v.end() のループを自前で回すと、
>パフォーマンスを上げることができるかも知れない。
明日試してみます。

ありがとうございました。
0029デフォルトの名無しさんNGNG
28=23
0030デフォルトの名無しさんNGNG
>>25
char s1[] = "abcdefg", s2[] = "abcd";
printf("%s\n", strstr(s1, s2) + strlen(s2));
003125NGNG
>>30
ありがとう!できました。感謝します。
003230NGNG
>>31
本当にこれでいいの?
0033デフォルトの名無しさんNGNG
>>31 こういう事なんじゃないの?

char* delstr(char *s1, char *s2, char *buf)
{
strcpy(buf, s1);
*strstr(buf, s2) = '\0';
return strcat(buf, strstr(s1, s2) + strlen(s2));
}

int main(void)
{
char s1[] = "abcdefg", s2[] = "abc", s3[] = "bcd", s4[] = "efg";
char buf[8];

printf("%s\n", delstr(s1, s2, buf));
printf("%s\n", delstr(s1, s3, buf));
printf("%s\n", delstr(s1, s4, buf));
return 0;
}
0034デフォルトの名無しさん NGNG
char buff[256];buff[0]='\0'
sprintf(buff,"%s","こんabcにdefgちはhi");
と定義された文字列があるとして、これを
char ln[256][256];
という文字配列に、nバイト以下ずつぎりぎりまで
詰め込んでいきたいのですがどうすればいいでしょうか。
例えば4バイトずつ詰め込むとしたら、
 :
 :
ln[5]'\0'
ln[4]こん'\0'
ln[3]abc'\0'
ln[2]にde'\0'
ln[1]ちは'\0'
ln[0]hi'\0'
という風になるようにしたいです。

まずln[0]に詰め込んでいき、4バイト分の「こん」まで入れたところで
まだbuffは続きがあるのでln[0]はln[1]に繰り上げます。
こんどはln[0]にabc・・と入れていき、「に」も入れたいところですが
2バイトなので次に持ち越すことにして、また繰り上げ、、、
というようにbuffを全部詰め込むまで続けたいです。
0035デフォルトの名無しさんNGNG
すみません。お願いします!
http://www1.kcn.ne.jp/~robe/cpphtml/index.html
ココのサイトのプリグラムで、
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1094628792&res=1

ここの部分の解説をお願いしたいのですが、
お願いします。
できれば、詳しくお願いします。
0036デフォルトの名無しさんNGNG
>>34
なんか質問文が矛盾しまくってるのは気のせいか?
003734NGNG
>>36
どのへんでしょうか?
何バイト分詰め込みたいかは状況によって変わるので、
nバイト分ということで汎用性を持たせて組みたいのです。

文字列や文字列配列の容量は余裕を持たせていますが、
文字列配列の方は、列数が足りない場合
自動的に増減させたいのですが、そういう組み方が分かりません。。。

最後の5行は、こんな感じでやればいいのかなぁ・・・
とは思って書いたのですが、もっと効率の良い方法があるのかもしれません。
どうかよろしくお願いします。
003836NGNG
すまん勘違いしてたみたい。
>まだbuffは続きがあるのでln[0]はln[1]に繰り上げます。
繰り上げるって後ろにずらす事だと今気付いた。

>char ln[256][256];
C++ならstd::list<std::string>でpush_frontしていく方がいいんじゃね?

2バイト文字を考慮したコピーはこんな感じ。
void copyn(const char* src, char* dest, int n)
{
std::copy(src, src+n, dest);
if( isleadbyte((unsigned int)src[n-1]) )
dest[n-1] = '\0';
}
0039デフォルトの名無しさんNGNG
ちょい修正

int copyn(const char* src, char* dest, int n)
{
std::copy(src, src+n, dest);
if( isleadbyte((unsigned int)src[n-1]) )
dest[--n] = '\0';
return n; // コピーしたバイト数
}
004038NGNG
>>38-39
忘れて。copynは多分うまくいかない。
004134NGNG
どうもです。小出し小出しで申し訳ないのですが、
一応Cの標準の関数だけでやりたいのです。
stl使ってないので他の部分が動かなくなりそうです。
004234NGNG
何とか自己解決できました。レスいただけた方、ありがとうございました。
004334NGNG
度々すいません。
文字列を一文字ずつ走査し、全角か半角かを判別する処理を作っています。

IsDBCSLeadByteを使うと、ひらがなや全角アルファベット大文字は
問題なく全角として判定できているようなのですが、
漢字や全角アルファベット小文字などがうまく判定できていないようです。
isleadbyteを使った場合は、unsignedにキャストしてますが
全て0が帰ってきてしまいます。

単純にコーディングミスの可能性もあるかもしれませんが、
何かうまく判定する方法があったら教えて下さい。
よろしくお願いします。
0044デフォルトの名無しさんNGNG
>>43
なんのコンパイラ使ってるのか知らんけど、
VC++ならこんな関数があるよ。
_ismbbkana()
0045デフォルトの名無しさんNGNG
>>43
問題ないみたいだけど?
004634NGNG
>>44
どうもです。判定する文字列は半角全角問わず、
ひらがなカタカナローマ字など色々入っている可能性があって、
最終的には全角か半角かができればいいです。
_ismbbkanaは半角カタカナを判定できるみたいですが、
それ以外のものも一括で判定したいです。
_ismbbleadというのも発見したのですが、
IsDBCSLeadByteと同じ結果しか得られませんでした…

>>45
マジですか。でもコーディングミスだったら
こんなに規則的にならないような気がするんですよね。
並び順とか関係なく必ず全角小文字ローマ字のところは
変になってるみたいです。漢字はものによってって感じです。
ひらがなは絶対成功してるようです。
何が違うのかちょっと謎なんですが、もうちょっと検証してみます。
004734NGNG
すいません、書き忘れましたが環境はVC++6.0とW2kです。
0048デフォルトの名無しさんNGNG
>>46
assert(::IsDBCSLeadByte(*"a"));
...
assert(::IsDBCSLeadByte(*"z"));

アサーションに掛からないよ?
0049デフォルトの名無しさんNGNG
うちの環境 VC++6.0sp6 WinXPsp1
では、以下のコードで「multi byte string」とちゃんと表示される。

#include <iostream>
#include <mbstring.h>
int main(void)
{
char str[] = "c";
if(_ismbblead(str[0])){ cout << "multi byte string" << endl; }
return 0;
}
005048NGNG
VC6+2kSP4
VC7.1+XPSP1

で試した。
005134NGNG
>>48
わざわざすいません。ありがとうございます。
なんとなく原因が判明しました。
カウンタを進める処理に間違いがあったみたいで、
判定関数に全角文字の2バイト目を入れてしまった場合に
ひらがななどは0が帰ってくるのですが
全角ローマ字小文字などの今までうまくいっていなかった文字では
1が帰ってきていました。
そのため不具合が起きていたようです。

お騒がせしました。ありがとうございました。
0052デフォルトの名無しさんNGNG
はじめまして,初めて書き込みします。現在,時間を読み取る精度として
1msの物を必要としています。time.hでは精度が悪く50msしかとれず,
マルチメディアタイマーを使用しようとしてもうまくいきません。
環境はBorland C++ を使用しています。
もしなにかいい方法を知っている方がいたら教えていただきたいのですが。
0053デフォルトの名無しさんNGNG
timeBeginPeriod(1);
timeEndPeriod(1);
の間でマルチメディアタイマーを使えば良い。
あとはQueryPerformanceCounterとかCライブラリのclockとかかな?
0054デフォルトの名無しさんNGNG
vectorの要素のコピー教えて下さいでつ。
0055デフォルトの名無しさんNGNG
std::copy
0056デフォルトの名無しさんNGNG
>>52
windows.hにGetTickCount、timeGetTimeがあるけど、
それでも10ミリ秒ぐらいかな。1ミリ秒は難しいかも。
0057デフォルトの名無しさんNGNG
>>43
setlocaleでデフォルトの"C"から変更していないとisleadbyteは常に0を返すよ。
0058デフォルトの名無しさんNGNG
初心者プログラマなんですが、C++勉強しています。
C++を使ってゲームを作ろうと思っているのですが、DirectXで苦労しています。
正直、ライブラリを自分で作るだけの能力が今はないので、
他で公開されているライブラリを利用して作ろうと思っています。
そこで、お勧めのライブラリがありましたら紹介していただきたいです。
よろしくお願いします。
0059デフォルトの名無しさんNGNG
>>58
「やねうらお」でぐぐってみそ
0060デフォルトの名無しさんNGNG
>>58
SDLとかAllegro
0061デフォルトの名無しさんNGNG
//テキストの表示
HDC hdc;
  LPTSTR lptStr = TEXT("111");
hdc = GetDC(hWnd);
  TextOut(hdc , 0 , 0 , lptStr , lstrlen(lptStr));
  ReleaseDC(hWnd , hdc);

これだと111が表示されるのですが

変数Aの内容を表示させたい時はどうすればいいのでしょうか?
VC++.netです
0062デフォルトの名無しさんNGNG
>>61
http://pc5.2ch.net/test/read.cgi/tech/1093958200/383
006361NGNG
>>62
sprintfや_stprintfかwsprintfを使って>>61をどのように変更すればよいのでしょうか?
0064デフォルトの名無しさんNGNG
こういう奴って周りに迷惑しかかけない
0065デフォルトの名無しさんNGNG
変数Aの内容を表示って16 進ダンプでいいのか?
0066デフォルトの名無しさんNGNG
そもそも変数Aの型ってなんなんだろうな?
0067デフォルトの名無しさんNGNG
>>65
>>66
マウスカーソルの座標を表示させたいんです
0068デフォルトの名無しさんNGNG
Cヒストグラムを作るプログラムが完成しません。お願いします。1000 以下の素数が格納されているデータファイル prm1000.dat を読み込み素数の度数分布表を作成したいと思っています。作ったプログラムが下にあるものです。
#include <stdio.h>
#define N 50
int main( int argc, char *argv[] ) {
FILE *fp;
char *datafile;
int i, j, width, prime, count[N];
/* error*/    
if ( argc != 2 ) { printf( "error : Invalid Usage\n" );
exit( 1 );}
datafile = argv[1];
if ( ( fp = fopen( datafile, "r" ) ) == NULL ) {
printf( "error : can't open %s\n", datafile );
exit( 1 );}
/* initialize*/    
for ( i = 0; i < N; i++ ) count[i] = 0;
printf( "Enter the width => " );
scanf( "%d", &width );
/* read and count*/
j = 1;
while ( fscanf( fp, "%d", &prime ) != EOF ){ if ( prime < width * j )
count[j]++;
else
count[++j]++;}
fclose( fp );
putchar( '\n' );
for ( i = 1; i <= j; i++ )
printf( "%5d 〜 %5d : %3d\n", width*(i-1), width*i-1, count[i] );
exit(0); }
作ったプログラムをコンパイル実行するとerror : Invalid Usageと出てしまいます。
このプログラムのどこに何を足したら完成できるか教えてください。お願いします
0069デフォルトの名無しさんNGNG
>>68
氏ねやマルチ
0070デフォルトの名無しさんNGNG
文字列の長さを指定して出力するC++流の方法ってあるんでしょうか?

char str = "jpnkor";
printf("%.3s\n", str); //こんなんのC++流

std::cout << std::setw(3) << str << std::endl; //うまくいかない
0071デフォルトの名無しさんNGNG
>>70
boost使っていいなら
#include <iostream>
#include <boost/format.hpp>
int main () {
char *str = "jpnkor";
std::cout << boost::format ("%.3s") % str << std::endl;
return 0;
}
0072デフォルトの名無しさんNGNG
>>71
ってことは標準ではそんな都合のいいものは無いのか
レス�dクス
0073デフォルトの名無しさんNGNG
>>63
HDC hdc = GetDC(hWnd);
TCHAR szBuf[32];
wsprintf(szBuf, "%d", a);
TextOut(hdc, 0, 0, szBuf, lstrlen(szBuf));
ReleaseDC(hWnd , hdc);
007458NGNG
>>59-60
遅レスですが、ありがとうございます。
一通り検索してみます。
0075デフォルトの名無しさんNGNG
>>70 std::string::substr() じゃだめ?
0076デフォルトの名無しさんNGNG
>>73
レスありがとうございます
早速試してみます
0077デフォルトの名無しさんNGNG
>>75
レスthx。stringクラスなら切り出しができるんですね
やっぱchar配列はむりぽ(´・ω・`)
printf群使いまつ
0078errno84??NGNG
gccで日本語を表示するとerrnoが84になってしまうのはなぜですか?
また最適化オプションで回避してもprintfの戻り値をとるとerrno=84と
なってしまうのはどうしてなんでしょう。。。環境が間違っているのでしょうか?
////////// err84.c //////////
#include <stdio.h>
#include <errno.h>
int main()
{
int ret;
errno = 0;
printf("errno test1\n");
printf("%d => %s\n", errno, strerror(errno));
errno = 0;
printf("errno test2\n");
printf("%d => %s\n", errno, strerror(errno));
errno = 0;
printf("日本語で出力test\n");
printf("%d => %s\n", errno, strerror(errno));
errno = 0;
ret = printf("retval test1\n");
printf("%d => %s\n", errno, strerror(errno));
errno = 0;
ret = printf("retval test2\n");
printf("%d => %s\n", errno, strerror(errno));
errno = 0;
ret = printf("retval 日本語で出力 test\n");
printf("%d => %s\n", errno, strerror(errno));
return 0;
}
0079errno84??NGNG
コンパイル方法
$ gcc err84.c -o t0 -O0
$ gcc err84.c -o t1 -O1
$ gcc err84.c -o t2 -O2
$ gcc err84.c -o t3 -O3

t0実行
errno test1
0 => Success
errno test2
0 => Success
日本語で出力test
84 => Invalid or incomplete multibyte or wide character
retval test1
0 => Success
retval test2
0 => Success
retval 日本語で出力 test
84 => Invalid or incomplete multibyte or wide character
0080errno84??NGNG
t1実行
errno test1
0 => Success
errno test2
0 => Success
日本語で出力test
0 => Success
retval test1
0 => Success
retval test2
0 => Success
retval 日本語で出力 test
84 => Invalid or incomplete multibyte or wide character
///////////////////////////////
t2,t3はt1と同じ結果なので省略。
0081デフォルトの名無しさんNGNG
>>78
gcc (GCC) 3.4.1 (cygming special) で実行してみたけど、全部 0 => No error になった。
というわけで環境きぼん。
0082デフォルトの名無しさんNGNG
EUCやSJISやUNICODEとかの環境もな・・・
0083デフォルトの名無しさんNGNG
ボキ gcc 3.3.4 で、euc-jp で >>78 と同じ結果。参考までに
0084デフォルトの名無しさんNGNG
gcc先生のご意見:
nnn.c:8: 警告: implicit declaration of function 'strerror'
nnn.c:8: 警告: format '%s' expects type 'char *', but argument 3 has type 'int'

icc先生のご意見:
nnn.c(8): remark #981: operands are evaluated in unspecified order
printf("%d => %s\n", errno, strerror(errno));
0085デフォルトの名無しさんNGNG
>>84
上(gcc)は #include <string.h> すると黙る
0086デフォルトの名無しさんNGNG
GetCursorPosではマウスカーソルのスクリーン全体での座標が得られるんですが
ウインドウ内での座標(ウインドウの一番左上の座標を(0,0)とした座標)
を得るにはどうすればいいのでしょうか?
0087デフォルトの名無しさんNGNG
ScreenToClient()
0088デフォルトの名無しさんNGNG
>>87
レスありがとうございます
ScreenToClient() を検索してみましたが使い方いまいちわかりませんでした

GetCursorPosで得たスクリーン座標をウインドの座標に変換する時は
そのように使えばいいのでしょうか?
0089デフォルトの名無しさんNGNG
>>88
考えろ。調べろ。
0090デフォルトの名無しさんNGNG
POINT pos;
GetCursorPos(&pos);
ScreenToClient(hWnd, &pos);
0091デフォルトの名無しさんNGNG
djgpp(gcc) ver2.7.1 で 10行程度の Hello,World をコンパイルしたら
実行ファイルが500kbにもなったんですが、もっとファイルサイズを抑えられませんか
0092デフォルトの名無しさんNGNG
strip したら
0093デフォルトの名無しさんNGNG
>>90
お返事ありがとうございました
おかげさまでちゃんとできました
0094デフォルトの名無しさんNGNG
ヘッダファイル削ったら?
0095errno84??NGNG
78です。
環境を書き忘れていました。すいません。
gcc (GCC) 3.2.3
ja_JP.eucJP
となっております。
0096デフォルトの名無しさんNGNG
21÷5=4余り1ですが
この商の4の部分だけが欲しい場合どうすればいいのでしょうか
0097デフォルトの名無しさんNGNG
21/5
0098デフォルトの名無しさんNGNG
>>97
れすありがとうございます
21/5=4.2にならないのでしょうか
4の部分だけが欲しいんです
0099デフォルトの名無しさんNGNG
>>98
自分で試してごらんなさい
0100デフォルトの名無しさんNGNG
だいじょうぶ
0101デフォルトの名無しさんNGNG
>>98
21/5だっつってんだから試すなりしろよ。
あと入門書嫁
0102デフォルトの名無しさんNGNG
>>99
>>100
>>101
早速試してみます
ありがとうございました
0103デフォルトの名無しさんNGNG
newを使わずに、仮想関数テーブルをセットする方法はありますか?

独自のalloc関数で確保したメモリにクラスを割り当てたいのですが、
newかローカル宣言するしか仮想関数テーブルをセットする方法が
ないみたいで、今はこうやっています。
{
//newでないので、この時点ではテーブルがセットされない。
ClassA* a = my_alloc();
  //ローカル宣言したオブジェクトをコピーすることでテーブルをセットする・・・
ClassA temp_a;
memcpy(a, &a, sizeof(a));
}
グローバルnewをオーバーロードするという手もありますが、大掛かりに
なってしまうので、仮想関数テーブル「だけ」をセットする
やり方があればご教授ください。
0104103NGNG
>>103
memcpy(a, &a, sizeof(a)) → memcpy(a, &temp_a, sizeof(a))
でした。
0105デフォルトの名無しさんNGNG
データコンバートプログラムをCで作っているのですが、
困った問題にぶつかってしまいました。

Mac OS X 10.2.8
cc (GCC) 3.1 20020420 (prerelease)
において、
fopen: Too many open files
というエラーが出ております。
正確に計算したわけではありませんが概ね1000ファイルを開いた当たりでエラーが出ているようです。

同じプログラムをcygwinで動かしていますが、今のところ問題はないようです。
念のため、cygwinでもたくさんのファイルを開いた場合どうなるかをただいまテスト中です。

質問としては、
このエラーはfcloseでファイルポインタを閉じていてもそのプログラム中
でfopenが開けるMAXファイルポインタ数というものは決まっているのでしょうか?
それとも、単にどこかでfcloseの忘れがあるのでしょうか?
#fopenで開いたファイルがちゃんとfcloseで閉じているかは確認済みなのですが...

よろしくお願いします。
0106デフォルトの名無しさんNGNG
>>105
http://developer.apple.com/ja/qa/qa2001/qa1005.html
0107デフォルトの名無しさんNGNG
>103
placement newじゃ駄目なの?
0108デフォルトの名無しさんNGNG
std::get_temporary_buffer
std::uninitialized_fill
0109デフォルトの名無しさんNGNG
>>103
解決にはならないかもしれないが
http://www.s34.co.jp/cpptechdoc/reference/memory/index.html
0110デフォルトの名無しさんNGNG
>>106様
ありがとうございました。
プログラムのバグではないようなので安心しました。
0111デフォルトの名無しさんNGNG
>>110
1000ファイル同時に開くなんて,ものすごいプログラムですね.
0112デフォルトの名無しさんNGNG
スクリーン座標(x、y)をScreenToClientを使ってクライアント座標に変換するには
どのようにすればいいのですか?
0113デフォルトの名無しさんNGNG
>>111
そうか?socketだと大量に使うぞ?
0114デフォルトの名無しさんNGNG
>>112
>>86
0115デフォルトの名無しさんNGNG
>>111
同時じゃないぞ。つーか、普通無理。
0116デフォルトの名無しさんNGNG
>>114
90 名前:デフォルトの名無しさん[sage] 投稿日:04/09/11 09:01:48
POINT pos;
GetCursorPos(&pos);
ScreenToClient(hWnd, &pos);

のどこをどう変更したらいいのかわかりません
0117デフォルトの名無しさんNGNG
>>111
同時じゃありません。
開いて閉じての繰り返しです。

0118106,111NGNG
>>117
すみません.106はハズしてますね.
以下のコードでどうですか? 因みにうちのgcc 3.3.4 on Linux 2.4.26だと大丈夫です.
#include <stdio.h>
#include <stdlib.h>
const size_t SIZE = 100000;
int main () {
size_t i;
for (i = 0; i < SIZE; ++ i) {
FILE *f = fopen ("test.dat", "w");
if (f == NULL) {
printf ("0\n");
exit (1);
}
if (fclose (f) == EOF) {
printf ("1\n");
exit (1);
}
}
return 0;
}
0119103NGNG
>>107
クラスのアロケートを複数の方法から、動的に選択したいという都合があって。
グローバルnewの中でフックさせるしかないかなぁ。。
void* (*alloc_func)(size_t size);
void* operator new(size_t size)
{
return (*alloc_func)(size);
}
void set_alloc_func(void* (*newfunc)())
{
alloc_func = newfunc;
}
こんな感じかね。

>>109
配列を使う場合に使えるのかな?見てみますーthx.
0120デフォルトの名無しさんNGNG
>>116
真面目に言ってる?
まず POINT の意味を調べてみれ。
それで分からなかったら知らん。
0121106,111NGNG
>>117
因みに
gcc 3.1 20020420 on Darwin Kernel Version 6.8
でもエラーは出ません.

ひょっとして閉め忘れてませんか?
0122デフォルトの名無しさんNGNG
>>120
早速調べてみます
ありがとうございました
0123デフォルトの名無しさんNGNG
>>121様
サンプルプログラムありがとうございます。
問題なく動作しました。

やはりプログラムに問題がありそうですね。
閉じ忘れも確認しましたが、大丈夫だと思います。
データの書き出しは他の汎用ライブラリに任せているので、そのライブラリの問題かもしれませんが
まだ、きり分けができておりません。

とりあえず、テストファイルを開くだけのプログラムを作成してみます。
0124デフォルトの名無しさんNGNG
例えば、

CHoge hage;
printf("%s\n", hage);

のように記述してCHogeクラス中で持っている文字列を
printf()に渡して表示させることって可能でせうか?
0125124NGNG
キャストを使わないで記述したいです
0126デフォルトの名無しさんNGNG
>>124
できません。
prinf("%s\n", hage.getStr());
のようにするのが通常です。
getStr()は内部で持っている文字列を返すメソッド
0127デフォルトの名無しさんNGNG
>>124
class CHoge {
char *lpString;
};
lpString が CHoge の最初のメンバでなきゃだめだし、
他のクラスを継承していてもだめだ。
とてもじゃないがお勧めできない。

コンパイラにも依存する…?
0128デフォルトの名無しさんNGNG
>>124
持っている文字列をかえす関数をCHogeに装備。
0129124NGNG
va_listの仕組みを良く理解していないので、
...に渡した変数がどういう型として扱われるのかが判れば
operator定義でなんとかならんかなぁとか思ったんですが、
やっぱむりぽ?
0130デフォルトの名無しさんNGNG
>>129
この場合は va_list の仕組みというより printf の仕組みでしょ。
%s だから文字列ポインタとみなす、という。
0131デフォルトの名無しさんNGNG
>>124
こんなかんじ?

#include <stdio.h>

class CHoge {
public:
CHoge(){}
~CHoge(){}

void setStr(char* str) {
m_str = str;
}

char* getStr() {
return m_str;
}
private:
char* m_str;
};

int main(void) {
char* str = "test";
CHoge choge;

choge.setStr(str);
printf("%s", choge.getStr());
}
0132124NGNG
そういう意味でただ動けばいいというのなら>>127で良さそうなんですが、
C++の仕様的に動作が保証できる方法が無いかとちと考えてた訳です。

でも、やっぱムリぽですね。
レスくれた皆様ありがとうございました。
0133124NGNG
>>131
いえ、記述的に
printf("%s\n", hage);
だけで済むようにできないかと
0134デフォルトの名無しさんNGNG
>>132
そういう要求のために iostream が設計されたんだろうけどな。
0135124NGNG
例えば
class CHoge{
public:
operator char* (void) { return m_pStr; }

protected:
char* m_pStr; // 文字列を保持してるメンバ変数
};

とかしておくと
printf("%s", (char*) hage);
でいいわけです。

つうことはデフォルトのキャストが判ればそれをoperatorで定義しとけば...?
てなことを考えてた訳です。
0136デフォルトの名無しさんNGNG
>>124
class CHoge {
char mFoo[10];
public:
operator char *() {return mFoo;}
CHoge(const char * foo) {strcpy(mFoo, foo);}
};
// というようにキャストオペレータを用意して、
int main()
{
CHoge hage("abc");
// たとえば、
printf("%s\n", strcat(hage, ""));
// とか
printf("%s\n", static_cast<char *>(hage));
// するのが関の山。
return 0;
}
0137デフォルトの名無しさんNGNG
>>121様

お恥ずかしながらプログラムのミスでした。
opendir()
に対応する
closedir()を書き忘れいたことが原因のようです。

勝手な推測ですが、FILEとDIRの型は内部的には同じものを使っていて、
>>106の問題に当たってしまったものの
エラーがfopenだったため、closedirに気付かなかったという流れだと思います。

いろいろありがとうございます。
0138デフォルトの名無しさんNGNG
ふつうに行儀良く書けばいいのになぁ
0139デフォルトの名無しさんNGNG
>>135
それやるくらいなら普通にやった方が自然だね
0140106,111NGNG
>>123
落ちる前に止めてみてfstatなんかで開いているファイル数確認してみてはどうでしょ?
0141106,111NGNG
>>137
リロード怠ってました.失礼しました.
0142デフォルトの名無しさんNGNG
>>141様
ありがとうございます。
fstatやっていれば、もっと早く分かっていたっぽいですね。

ディレクトリを再帰で開いているところがあり、まだ問題が残って
いる可能性が高そうなので、一度確認してみます。
0143デフォルトの名無しさんNGNG
sizeof(array)で配列のサイズが分かるのは何故なんでしょうか。
array配列の先頭ポインタを渡してるだけなのに。
例えば
int ReturnArraySize(int* array){
int size=sizeof(array)/sizeof(array[0]);
return size;
}
では、配列の要素数を返してくれないのは納得できるのですが...
ちなみにスコープ内で配列サイズが分かるということで合ってます?
0144デフォルトの名無しさんNGNG
先頭ポインタ > &array

arrayはポインタと同じように使えるだけ。
0145デフォルトの名無しさんNGNG
>>143
「コンパイラが コンパイルする時」は、その配列が確保したサイズはわかってるよね。
よく観察してみよう
0146デフォルトの名無しさんNGNG
>>143
多分それ常に1が返ると思うぞ。
0147143NGNG
つまり、スコープ内ではアドレスとして渡しているわけではなく
sizeof(array)はその配列全体サイズを返すという配列特有の
処理を施しているという事でしょうか。
スコープ外では必然的にポインタとして渡す事になるから...umm
0148デフォルトの名無しさんNGNG
>>147
sizeofを関数だとでも勘違いしてないか?
0149デフォルトの名無しさんNGNG
>>147
int a[100];//aが100ってわかってる
size = sizeof(a);//コンパイル時に size = 100;になる
size = sizeof(a[0]);//コンパイル時にintのサイズになる
0150デフォルトの名無しさんNGNG
int a[100];
int* p = a;

size = sizeof(p); // pのサイズ==int*のサイズ==4になる
0151デフォルトの名無しさんNGNG
実装者の裁量に任されてる
4とは限らない
0152デフォルトの名無しさんNGNG
>>151
こういう場合はそういうつっこみはしない方がいいと思う。
>>143が混乱しそう
0153デフォルトの名無しさんNGNG
>>152
そうかなあ、>149はちゃんと正しく書いてるのに。
int*が4と覚えられたらまずいと思うな。
0154デフォルトの名無しさんNGNG
>>153
正しくないよ。

>size = sizeof(a);//コンパイル時に size = 100;になる
size = intのサイズ*100になる
0155デフォルトの名無しさんNGNG
>>154
ほんとだ
0156143NGNG
「静的次元配列に sizeof を使うと、配列全体のサイズを返します」
C解説サイトに書いてました。なんとなく腑に落ちたような。
int*が4とは限らないというのは一応知っているつもりですが。いちおう...
>>148
確かにそういう風に思ってたかも。でも、演算子ってなんなんだ
って逆に思ってしまった。なんだか、キリがないですね。すみません。
0157デフォルトの名無しさんNGNG
アドレスからサイズを求めているのではなく、その変数の型情報からサイズを求めている
という感じかな?
だから

>int a[100];
>int* p = a;
>size = sizeof(p);

sizeof(p)はsizeof(a)ではなくsizeof(int*)と同じになる。
0158デフォルトの名無しさんNGNG
配列とポインタを混同するな。
int a[100], *p; とあったとき、aとpは全然別物。
似たような使い方ができるだけであって、特別に何かをしているわけじゃない。
0159デフォルトの名無しさん NGNG
fooクラスをhogeクラスのメンバ(コンポジション)として使いたい時、

class hoge
{
private:
 int i;
 int j;
 foo myfoo(i,j);//エラー
public:
 hoge();
};

hoge::hoge()
{
 i=100;
 j=200;
}

のように、hogeオブジェクト生成時にそのメンバ変数を引数として
fooオブジェクトを作成することはできないのでしょうか。
上のような書き方ではエラーでコンパイルできませんでした。
引数を取らずにfoo myfoo();と定義すれば
うまくいくようなのですが、これでは別の場所でhogeのi,j値を
渡さないといけないので面倒くさいしなんかかっこ悪いです。
ですがそうしないといけないものなのでしょうか。
0160デフォルトの名無しさんNGNG
ほげ::ほげ():i(100),j(200),まいふー(i,j){}
0161デフォルトの名無しさんNGNG
age
0162デフォルトの名無しさんNGNG
>>159
foo myfoo(); では、foo型のオブジェクトを返すmyfooという名前の関数の
宣言になってしまう。
0163159NGNG
>>160
なんか見たことの無い書き方で
何がどうなってるのか分からないんですが
普通に整形したらどういう感じになるんでしょうか…
0164デフォルトの名無しさんNGNG
>>163
constructorでのmember/base classの初期化構文。
0165デフォルトの名無しさんNGNG
#include <iostream>

class foo {
 double i, j;
public:
 foo(double x = 0, double y = 0) : i(x), j(y) {}
 void printfoo() const { std::cout << std::fixed << i << ", " << j << std::endl; }
};

class hoge {
 int i;
 int j;
 foo myfoo;
public:
 hoge(int x = 100, int y = 100) : i(x), j(y), myfoo(i, j) {}
 void printfoo() { myfoo.printfoo(); }
};

int main()
{
 hoge h;
 h.printfoo();
}
0166159NGNG
>>165
ありがとうございます。
度々申し訳ないのですが、↓のような感じの書き方はできないんでしょうか?
慣れてないものでシンプルな書き方じゃないとよく分からないのです。
試したらエラーがでましたが、>>165とは意味が違ってきてしまうのでしょうか。

class hoge{
private:
 int i;
 int j;
 foo myfoo;
bublic:
 hoge();
}

hoge::hoge()
{
 i=100;
 j=200
 myfoo(i,j);
{
0167デフォルトの名無しさんNGNG
>>166
意味が違うからエラーが出るに決まってんじゃン。

>>165が正しい書き方なのでこれを理解して覚えること。
メンバの初期化に引数つきコンストラクタを呼ぶにはこうするしかない。
メンバ初期設定リストで調べてみ。
0168デフォルトの名無しさんNGNG
少しは自分で調べろよ
検索語句も示されてるのに
知障か?
0169デフォルトの名無しさんNGNG
>>166
何度もいいますようにmyfoo(i, j);というのは関数の呼び出しです。コンストラクタの
呼び出しではありません。そしてmyfoo(int, int)という関数が宣言されていないので
エラーになるのだと思います。

どうしても初期化リストではなくコンストラクタ内からコンストラクタを呼び出すので
あれば、newの配置構文(placement-new)を使うか、単純にfoo型の一時オブジェクト
を作って代入してやればよいです。

class hoge {
int i;
int j;
foo myfoo;
public:
hoge() {
i = 100;
j = 200;
  myfoo = foo(i, j); //foo型の一時変数を代入
// new (&myfoo) foo(i, j); //こちらでもよい
}
void printfoo() const { myfoo.printfoo(); }
};
0170デフォルトの名無しさんNGNG
初めまして、学校の課題で摂氏を華氏に直すプログラムをC++で作ってるのですが
どうもうまくいかなくて行き詰ってしまったので助けてください><
#include<iostream>

using namespace std;

void CalcTemp(float, float,float&);

int main()
{
float tempCel,
float tempFahr,

CalcTemp(tempCel);

cout << "Enter celcius Temperature ==> ";
cin >> tempCel;
cout << "tempCel Celcius Degree = tempFahr Degree Fahrenheit ";


return 0;
}
void CalcTemp(float tempCel);
{
tempFahr = 9/5 * tempCel + 32 ;
}
0171デフォルトの名無しさんNGNG
>>170
void CalcTemp(float tempCel);
{
tempFahr = 9/5 * tempCel + 32 ;
}
じゃなくて、
void CalcTemp(float* tempCel)
{
tempFahr = 9/5 * tempCel + 32 ;
}

CalcTemp(tempCel);
じゃなくて、
CalcTemp(&tempCel);
0172デフォルトの名無しさんNGNG
#include<iostream>

using namespace std;

float CalcTemp( float );

int main()
{
float tempCel;
float tempFahr;

tempFahr = CalcTemp( tempCel );

cout << "Enter celcius Temperature ==> ";
cin >> tempCel;
cout << tempCel << " Celcius Degree = " << tempFahr << " Degree Fahrenheit ";


return 0;
}

float CalcTemp(float tempCel)
{
return 9/5 * tempCel + 32 ;
}
0173デフォルトの名無しさんNGNG
void Fahr911() { for(;;) puts( "NO MORE BUSH!" ); }
0174デフォルトの名無しさんNGNG
>>171さん
>>172さん
レスありがとうございます。起動までこぎつけることができました。感謝感激です!
ただ、実際に数字を入れてみると-1.07e+008みたいな感じになってしまいます。
これはどうしたら直せますか?ご教授お願いします。
0175デフォルトの名無しさんNGNG
std::setiosflags( std::ios::showpoint )
std::setiosflags( std::ios::fixed )
0176デフォルトの名無しさんNGNG
>>174
ソースをもっとよく見直せ。いったい何を計算してるんだ?
cinから貰ったtempCel の値で tempFahr を求めるんだろうが。
0177デフォルトの名無しさんNGNG
>>176さん
レスありがとうございます。
float CalcTemp(float&);
float CalcTemp(float& tempCel)
に変えてみたのですが同じような結果になってしまいました。
根本的に勘違いしてるところがあると思うのでもしよろしければ
教えて頂けませんか?
0178デフォルトの名無しさんNGNG
>>177
cout << "Enter celcius Temperature ==> ";
cin >> tempCel;
tempFahr = CalcTemp( tempCel );
cout << tempCel << " Celcius Degree = " << tempFahr << " Degree Fahrenheit ";
0179デフォルトの名無しさんNGNG
>>169
> // new (&myfoo) foo(i, j); //こちらでもよい

よくねーよ。
0180デフォルトの名無しさんNGNG
>>179
理由は?
0181デフォルトの名無しさんNGNG
>>178さん
ありがとうございます!!できました。
つまりcinで数値を入れた後に計算するようになってなかったのが
原因と理解しましたが合ってますか?
0182デフォルトの名無しさんNGNG
>>179
お前もしかしてplacement new構文を知らないんじゃないか?
もう一度よく勉強してみろ。
0183デフォルトの名無しさんNGNG
>>180
すでにデフォルトコンストラクタで構築されたmyfooが解体されずに
新たに配置newでコンストラクトしてる。
だと思う。
0184デフォルトの名無しさんNGNG
>>183
それはおかしい。myfooのデフォルトコンストラクタはいつ呼ばれているというんだ。
0185デフォルトの名無しさんNGNG
>>184
hogeのコンストラクタが呼ばれる前だよ。
あるクラスのコンストラクタが呼ばれるときには、基底クラス・メンバの構築は完了してる。
0186デフォルトの名無しさんNGNG
>>185
これやってみ。aがデフォルトコンストラクタで構築された後、解体されずにまた構築されるから。

struct A {
A() { cout << "A::A()" << endl; }
A(int) { cout << "A::A(int)" << endl; }
~A() { cout << "A::~A()" << endl; }
};

struct B {
A a;
B(int i) {
cout << "B::B()" << endl;
new(&a) A(i);
}
};

B b(10);
0187186NGNG
× >>185
○ >>184
アンカー間違えた。
0188179NGNG
>>183,>>185,>>186 フォロー感謝。
0189デフォルトの名無しさんNGNG
(部分特別化の出来ない)VC6で使えるdelegateクラス誰か作ってください
0190デフォルトの名無しさんNGNG
>>189 boost::function はダメだったっけ?
0191デフォルトの名無しさんNGNG
>>189
いくらで買ってくれますか?
0192デフォルトの名無しさんNGNG
>>190
function1とかfunction2と明示してやんないとダメみたいです。
0193デフォルトの名無しさんNGNG
>>192
それは「使える」に入らないのか?
0194デフォルトの名無しさんNGNG
>>193
入らない。
struct C{
 template<class T>
 void apply(boost::function<T> fn){ fn(); } };
3行で書けるものがfunctionの引数に応じたapplyのオーバーロードを書かなあかん。
それによって悪い悪臭を放つ。
0195デフォルトの名無しさんNGNG
>>194
delegateとして使うなら引数の型と個数は静的に決定されてるんだから
そんな屁理屈が出てこないはずなんだが。 
0196164NGNG
スルーかよ。アフォが。
0197194NGNG
うっ。悔しいがあんたが大将さ。
漏れはおととい出直してくるわ。
0198デフォルトの名無しさんNGNG
freadで読み込んだバイナリデータを
アスキーに変換csvに出力するにはどうしたらいいでしょうか?

0199デフォルトの名無しさんNGNG
>>198
そんな仕様書じゃ作れません
0200デフォルトの名無しさんNGNG
それはしようがないね
0201デフォルトの名無しさんNGNG
”a=1かつb=2でないなら”
は
”!((a==1)&(b==2))”
でいいのでしょうか?
0202デフォルトの名無しさんNGNG
>>201
いいえ。駄目です。
0203デフォルトの名無しさんNGNG
>>201 曖昧。
0204デフォルトの名無しさんNGNG
>>202
>>203
どうすればいいのでしょうか?
0205デフォルトの名無しさんNGNG
>>204
!((a == 1) && (b == 2))
(a == 1) && (b != 2)
ご注文はどっち?
0206デフォルトの名無しさんNGNG
>>205
!((a == 1) && (b == 2)) の方でした
&が二ついるんですねw
ありがとうございました
0207デフォルトの名無しさんNGNG
ファイルの特定のアドレスにある情報を調べるにはどうすればいいのでしょうか?
例えば、ファイルの先頭から12 byte目の情報を調べたい時です
0208デフォルトの名無しさんNGNG
>>207 open → seek → get
0209デフォルトの名無しさんNGNG
>>208
レスありがとうございます
seekについて調べてみたのですが使い方が載っていませんでした
よろしければ使い方も教えてください
0210 ◆FIcNi4f8js NGNG
載っていない訳がない
0211デフォルトの名無しさんNGNG
>>210
「seek ファイル」で検索してみたのですがCのseekについては見つかりませんでした
0212デフォルトの名無しさんNGNG
fseek
0213デフォルトの名無しさんNGNG
>>212
fseekでヒットしました
これから読んできます

ありがとうございました
0214フフフNGNG
BorlandC++5,5をインストールし、DirectX9 SDKをインストールし、
コマンドラインからDirectXのサンプルプログラムをコンパイル
したのですがコンパイルエラーが出てしまいます。

リンカの設定をしないとダメだと聞いたので
bcc.cfgファイルに
-I"C:\DX90SDK\Include"
-L"C:\DX90SDK\Lib"
ilink32.cfgファイルに
-L"C:\DX90SDK\Lib"

と追加したのですが
Fatal: オプションが必要 :LC:\DX90SDK\Lib
と、コンパイルエラーが出てしまいます。
どうしたらいいのか教えてください。

0215デフォルトの名無しさんNGNG
>>214 こっち
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/l50
0216デフォルトの名無しさんNGNG
37のn乗{n=1,2,3,…}を計算する時、下3桁が示すパターン周期を求めよ。って問題があるんですが
どうすれば下3桁だけを比較できるのか全く検討がつきません。

どうすればいいか教えてくださいお願いします。
0217デフォルトの名無しさんNGNG
>>216
long long int x;
x = 100100;
として
下三桁は x - x / 1000
0218デフォルトの名無しさんNGNG
下三桁は x % 1000
0219デフォルトの名無しさんNGNG
>>217
嘘

long long int tmp;
も宣言

tmp = x / 1000;
x - x * 1000;
0220216NGNG
即レスありがとうございます。
がんばってみます。
0221デフォルトの名無しさんNGNG
整数値の有効桁数を高速に求めるアルゴリズムってありますか?
何も考えないで書くとこんなのになるんですが・・・。

int x = 0x80000000;
int count = 0;
while (x) {
x >>= 1;
count++;
}
0222デフォルトの名無しさんNGNG
桁数ってビット数?
int count = sizeof(int)<<3;
それとも最大整数値?
int count = ~(1<<((sizeof(int)<<3)-1));

int型って32bitCPUと64bitCPUで有効桁数変わったっけ?(うろ覚え
0223デフォルトの名無しさんNGNG
対数とるんじゃ駄目?
0224デフォルトの名無しさんNGNG
>>222
>>221のプログラムも見ずに聞き返すなよ
0225デフォルトの名無しさんNGNG
>>221
sizeof(int)*8
0226デフォルトの名無しさんNGNG
sizeof(int) * CHAR_BITS
だな
0227221NGNG
すみません、文章がわかりにくかったですね。
>>221で言った有効桁数ってこういう意味でいっていました。
整数値 = 桁数
0x00000001 = 1
0x00000002 = 2
0x00000004 = 3
0x00000008 = 4
0x00000010 = 5
・・・
0x80000000 = 32
ようは立っているビットの最上位ビットの位置のことです。
言葉の使い方がわるかったです、スミマセン。
0228デフォルトの名無しさんNGNG
つ ttp://www.nminoru.jp/~nminoru/programming/bitcount.html
0229デフォルトの名無しさんNGNG
インラインアセンブリで BSR 命令を使うとか
0230デフォルトの名無しさんNGNG
#include <stdio.h>

int log2(int arg)
{
int r;
__asm {
mov eax, -1;
bsr eax, arg;
inc eax
mov r, eax;
}

return r;
}

int main()
{
int testvalues[] = { 0x00000000, 0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010 };
int i, max = sizeof(testvalues) / sizeof(int);
for(i = 0; i < max; i++)
{
printf("%08X = %d\n", testvalues[i], log2(testvalues[i]));
}
getchar();
return 0;
}
0231デフォルトの名無しさんNGNG
C言語で配列の個数の調べ方をおしえてください。
こんな感じの場合の配列aの個数です。

int i;
int a[] = {1,2,3,4};

for(i=0;i<aの配列の個数;i++){
}
0232デフォルトの名無しさんNGNG
>>231
#include<stdio.h>
main(){
int a[] = {1,2,3,4};
printf("%d\n",sizeof(a)/4);
return 0;
}
0233デフォルトの名無しさんNGNG
4ってのはどこからやってきたのだろうか
0234デフォルトの名無しさんNGNG
int は4byteだから。
0235デフォルトの名無しさんNGNG
>>234
あほか。アホか。阿呆か。
0236デフォルトの名無しさんNGNG
sizeof (a)/sizeof(a[0])
0237デフォルトの名無しさんNGNG
そういやどっかで
#define NUMOF( array ) ( sizeof( ( array ) ) / sizeof( ( array[ 0 ] ) ) )
なんていう糞マクロ見たっけなあ
0238231NGNG
>>232-237
Σ(゚Д゚;≡;゚д゚)
どれが一番ポピュラーな方法なんでしょうか??
こんな感じですか??

int i;
nt a[] = {1,2,3,4};
int size = sizeof (a)/sizeof(a[0]);
for(i=0;i<size;i++){
}
0239デフォルトの名無しさんNGNG
そうだよ
0240デフォルトの名無しさんNGNG
>>237
有名なマクロだよ。
Cでは良く使われるし糞とは言えない。
C++だったらテンプレートでやるべきだけど。
0241デフォルトの名無しさんNGNG
要素数を得るためのテンプレートなんてトリッキーすぎて
「べき」なんて言えないよ。
0242デフォルトの名無しさんNGNG
どっちにしろ >>237 はエラーになる
0243デフォルトの名無しさんNGNG
(sizeof(array)/sizeof(array)[0])
とかそういう話?
0244デフォルトの名無しさんNGNG
>>243 (^Д^) キャハハ何言ってんのこいつ
0245デフォルトの名無しさんNGNG
ttp://www.tietew.jp/cppll/archive/8996
0246デフォルトの名無しさんNGNG
>>231はC言語で、といってるが。
テンプレートの話はひとまず置いておいたほうが混乱させなくてよいとおもうぞ。
インタプリンタ系言語だと、a.countとかa.indexみたいな感じで配列の要素数一発で調べられたりするからね。
初心者さんにはつまずきやすいところではあるな。
0247デフォルトの名無しさんNGNG
>>246
お前のレスのほうがよっぽど混乱させる文だな
0248デフォルトの名無しさんNGNG
>>245
それは私が別スレで取り上げたのと同じやつ^^;
0249デフォルトの名無しさんNGNG
でも、マクロはいろいろ取り扱いが危険なので、なるべく使うべきでは無いと思うよ。
マクロは結局単なる置き換えに過ぎないし、コンパイラの機能ではないから、
マクロでエラーが発生したときにエラーメッセージからどこが問題かを判断し
にくいということがある。
良くある間違いは置き換えであることを忘れて-つまり関数と勘違いして-
マクロを書いてしまうと括弧を付け忘れたりして予想もしない計算結果になること
もある。

具体的にどうすれば良いかと言うと、配列の要素数を求める計算自体は
それほど複雑でもないので、
o 配列を宣言したすぐ後で要素数を入れる変数を用意しておくか、
o その場その場でsizeof(array)/sizeof(array[0])を実行するか、
した方が良いと思う。
0250デフォルトの名無しさんNGNG
マクロの中身を括弧でくくっておくのは普通にやる事じゃなかったのか?
そうすりゃ計算結果が狂うなんてまずないし。
0251デフォルトの名無しさんNGNG
そういう問題じゃないだろ。
汎用マクロにしたら配列とポインタを混同してしまう危険があるだろ。
ポインタで渡してもエラーにならないし。
0252デフォルトの名無しさんNGNG
有名なのだと
#define max(n, m) (n > m ? n : m)
c=max(++a, ++b);
みたいなのだな。numofマクロならそんな事はないだろうけど。
0253デフォルトの名無しさんNGNG
テンプレートはconstantな要素数取れたっけ?
0254デフォルトの名無しさんNGNG
>>252
そういう問題じゃないと何度(ry
0255デフォルトの名無しさんNGNG
#define max(n, m) (n > m ? n : m) ×
#define max(n,m) (n > m ? n : m) ○

こんな初歩的ミス犯すような奴にマクロなど使えんわっ
0256デフォルトの名無しさんNGNG
?
0257デフォルトの名無しさんNGNG
>>255
そういう問題じゃないと何度(ry
0258デフォルトの名無しさんNGNG
>>257
あれが問題ではないとでもいうのかな?
0259231NGNG
けっこういろいろ流儀があるようですね。
当面、>>249さんのいわれるように、
その場その場でsizeof(array)/sizeof(array[0])を実行する
でやってこうとおもいます。

みなさま、どうもありがとうございました。
0260デフォルトの名無しさんNGNG
>>259
鵜呑みにするな!
0261デフォルトの名無しさんNGNG
その場その場でやるのが面倒だという考えからサブルーチンが生まれ、関数、マクロが生まれた……はず。
0262デフォルトの名無しさんNGNG
>>261
でも、なれていない人がやるとバグの温床にならないかな
0263デフォルトの名無しさんNGNG
マクロは、
どうしてもマクロじゃないと出来ない!
マクロで書いた方がスッキリ!
な時以外使わないなあ
0264231NGNG
>>259
え?これじゃまずいんですか?(゚д゚lll)

うぅ、わからん...
0265デフォルトの名無しさんNGNG
>>264
マクロは型情報などお構いなしだとかいった点で、
バグを追跡しにくくなるってのは昔から言われてることではあるけど、
その規模のマクロで追跡を困難にするほどの力はないと思う。
少なくとも「毎回書く」よりはマクロの方が上等な解決。
エラーメッセージが見やすいとかよりはまずソースの見易さを考えるべきで、
そのためには処理に名前をつけるってのは基本的なことがら。
というわけで私はマクロ賛成派。

結局は自分がやりやすいほうを選べばいい。どちらにもメリット・デメリットはある。
>>231氏はソース中に
sizeof(array)/sizeof(array[0])
と書かれてるのと
NUMOF( array )
と書かれているのとどっちが見やすいと思う?
0266デフォルトの名無しさんNGNG
でも、もしC++を使える環境なら、インラインやテンプレートを使う方がお薦めできるけれどね
0267265NGNG
>>266
そりゃそ〜だ。
普段Cしか使わないからC++のこと忘れてた。
0268デフォルトの名無しさんNGNG
>>265
どう考えても、sizeof(array)/sizeof(array[0]) のままの方がいいでしょ。
0269デフォルトの名無しさんNGNG
>268
どう考えてもって・・・発想力弱いんじゃ?
0270デフォルトの名無しさんNGNG
関数にポインタ渡す代わりに参照演算子(&)使えば、
配列サイズの計算できるんだ...なるほど
C言語だったらどうすればいいんだろ
0271デフォルトの名無しさんNGNG
>>270
できないでしょ(w
「配列」から「配列へのポインタ」に変数が変更されたりしたら、もうお手上げ。
コンパイルエラーが得られないのは相変わらず。

>>269
sizeof(a[])/sizeo(a[0])は、見るからに怪しいので、
メンテナンス時には誰もが注意を払ってくれる。
発想が弱いのは君だろ?認めろよ。
0272271NGNG
帝政

sizeof(a[])/sizeo(a[0])
↓
sizeof(a)/sizeo(a[0])
0273デフォルトの名無しさんNGNG
>271
俺はケースバイケースだと思うんだけど。
0274デフォルトの名無しさんNGNG
>>271
> sizeof(a[])/sizeo(a[0])は、見るからに怪しいので、
> メンテナンス時には誰もが注意を払ってくれる。
なんだ、「どう考えても」って、こんなのを考えただけのことなのか。
0275デフォルトの名無しさんNGNG
すいません
構造体について教えてほしいのですが
struct render{
int a;
int b;
char c[32]
};
render rend={64,128,"まぐろ"};
はできるのに
render rend[128];

rend[0]={64,128,"まぐろ"};
と初期化以外でするとエラー吐きますよね。
初期化以外で関数事態を一括で代入する方法を知りたいのですが
知識をご教授お願いします。
0276デフォルトの名無しさんNGNG
関数?
0277デフォルトの名無しさんNGNG
>>275
関数でなくて構造体でしょ?Cには無いっぽい。
関数で強引にやる方法はあるが。

int main(void)
{
 ・・・
 rend[0] = InputRender(64, 128, "まぐろ");
 printf("%d %d %s\n", rend[0].a, rand[0],b, rand[0].c);
 ・・・
}

render InputRender(int a, int b, int c[32])
{
 render rend;

 rend.a = a;
 rend.b = b;
 strcpy(rend.c, c);

 return rend;
}
0278デフォルトの名無しさんNGNG
>>275

struct render {
int a;
int b;
char c[32];
void set(int va, int vb, char * vc) {a = va; b = vb; sprintf(c, "%.31s", vc);}
};

render rend[128];
rend[0].set(64, 128, "まぐろ");
rend[1].set(32, 64, "はまち");
0279デフォルトの名無しさんNGNG
ちっ、はまち書いてたら負けた
0280275NGNG
できましたです。

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

    ちまき…(・∀・)イイ!!
0281デフォルトの名無しさんNGNG
Cではコンパウンドリテラルを使うのが一般的だろうけど、
文字列はstrcpyでもつかわないと仕方ないな。
0282デフォルトの名無しさんNGNG
構造体配列を丸々引数として参照型で自作関数に渡したいのですが、中々上手く行きません。
下の例で言えば、*に当たる部分でしばらく悩んでいます。
初心者故に初歩的な質問ですみませんが、どうか宜しくお願いします。

例(変数・関数名、型宣言は適当)
int CountNum( * );
struct NUMDATA { int data1, data2, ・・・(略) }
void main(){
    NUMDATA numdata[DATA_MAX] = { 10, 20,・・・(以後略)
    CountNum( * ); ←ここで「numdata[DATA_MAX]」の要素全てをまとめて渡したい
    ・・・(略)
}
int CountNum( * )
{
    ・・・(略)
}
0283デフォルトの名無しさんNGNG
>>282
先頭ポインタと要素数を渡すようにしたらええやん。
int CountNum(NUMDATA* p, int length)
0284デフォルトの名無しさんNGNG
そこはふつーvectorだろ?
0285デフォルトの名無しさんNGNG
>>282
非現実的
template<unsigned N> int CountNum(NUMDATA(& hoge)[N]);
0286デフォルトの名無しさんNGNG
初期化処理(環境設定ファイル読み込み処理)
環境設定処理を読み込み、環境設定情報を環境設定情報管理テーブルに
保持するとはどーゆーことですか?
プログラムを作る実習で初期化設定のモジュール作成
の担当になったのですが、何を作ればいいのかわからず、
困っています。

0287デフォルトの名無しさんNGNG
>>286
実行環境は?Linux?Windows?MacOSX?設定内容は?
0288デフォルトの名無しさんNGNG
Linuxです。
0289デフォルトの名無しさんNGNG
すいせん。設定内容ってなんですか?
0290デフォルトの名無しさんNGNG
>>288
そのプログラムではどんな初期化・設定が必要?
それがわからないと話にならないよ
0291デフォルトの名無しさんNGNG
widestudioっては良いんですか?
0292デフォルトの名無しさんNGNG
環境設定処理を読み込み、環境設定情報を環境設定情報管理テーブルに
保持する。
環境設定のフォーマットはあるんですが…

勤怠のプログラムを作ります
0293デフォルトの名無しさんNGNG
>>291
超漢字ユーザにはお薦めできるけど。
WindowsやLinuxなら他にもっといいものがある。
0294デフォルトの名無しさんNGNG
>>292
聞いていることとは違うんだけど、もういいわ。
例えば、
------------------------
key0=value0
key1=value1
key2=value2
------------------------
というような設定ファイルだとしたら、
これを一行ずつ読み込んで、1行目ではkey0,=,value0の様に部分部分に分けて、
(key0,value0),(key1,value1),(key2,value2)
というペアで
struct {
char* key;
int value;
};
のような構造体などに保存するということではないかな。
0295デフォルトの名無しさんNGNG
てか、宿題スレに逝け。
0296デフォルトの名無しさんNGNG
>>294
ありがとうございます.
今一度仕様を読んだのですが、理解できず、
何からはじめたらいいのかもわからず、
講師にも聞いちゃいけないのでどーすることもできずに
止まってしまってます…
0297デフォルトの名無しさんNGNG
そうやって俺をイラつかせて、何をしたいんだ。
俺に恨みでもあるのか。それとも人をからかうのが好きなのか。
どちらにしても、お前は悪意をもって人を傷つけようとした。
こういう事はこれで最後にしろ。
0298デフォルトの名無しさんNGNG
どーもすいませんでした

移動します。
0299デフォルトの名無しさんNGNG
key0=value0
key1=value1
key2=value2
って変数ですか?
0300デフォルトの名無しさんNGNG
300get
0301デフォルトの名無しさんNGNG
>>299
設定ファイルに書かれているテキスト。
0302デフォルトの名無しさんNGNG
>プログラムを作る実習で初期化設定のモジュール作成
>の担当になったのですが、

「もっと基本的な段階でまったく勉強せず、複数人での共同制作の段階になって
慌てて調べようとしたが、基礎が完全に抜け落ちていては何をどう調べたらよいの
か全く解らない」
ということでしょうか
0303デフォルトの名無しさんNGNG
出てったやつを呼び戻すなよ。
0304デフォルトの名無しさんNGNG
>>302
まさしくその通りでございます
0305デフォルトの名無しさんNGNG
__FILE__とか__LINE__みたいな感じで関数名が取れるディレクティブ(orそれに変わるもの)
って無いでしょうか?ログ出力の際に関数名を出力したいので。
一応コンパイラはVC++6.0でお願いします。プラグマでもかまいません。
よろしくお願いします。

#でもプリプロセッサだから関数まで分らないだろうなぁ。。
0306デフォルトの名無しさんNGNG
>>305
BOOST_CURRENT_FUNCTION
0307306NGNG
ソースみたらVCには対応してないみたい
0308デフォルトの名無しさんNGNG
プリプロセッサ自分で作ればいい
0309デフォルトの名無しさんNGNG
>>306
ありがとうございます。
VC以外で機会があったら使ってみます。

0310デフォルトの名無しさんNGNG
>>305
http://seclan.dll.jp/c99d/c99d07.htm#dt19990516
ただし今のVCでは無理だという罠。
0311デフォルトの名無しさんNGNG
ありがとうございます。自分でその都度#defineすることにします。
0312デフォルトの名無しさんNGNG
>>311
やめとけ。今は、__FILE__と__LINE__で忍耐しとくべきだ。
せっかく作った機能も、いずれコンパイラの対応で必要なくなってしまう。
0313デフォルトの名無しさんNGNG
2005 Beta でも出来なかったけど、一体いつ対応するのやら
0314デフォルトの名無しさんNGNG
いらないし。
0315デフォルトの名無しさんNGNG
たのむから仕様変更はまとめてやってくれない?
0316デフォルトの名無しさんNGNG
>>311
ファイル名と行番号で出力しておき、外部ツールで関数名に展開すればいいんでない?
0317デフォルトの名無しさんNGNG
>>316
それが一番、影響小・低開発コストだね。
0318デフォルトの名無しさんNGNG
C++学習中です。
boost::lambdaに関する質問があります。
list<メンバ関数・変数を持つオブジェクト>から、
特定の値にマッチする要素を取り出したい場合に、
(特定の値を持っている要素が複数存在することはありません)

return find_if(list.begin(),list.end(),(_1.data()==param));

としたいのですが、コンパイルエラーが以下の用に発生してしまします。

c:\~~~.cpp(13): error C2039: 'data()' : 'boost::lambda::lambda_functor<T>' のメンバではありません。
with
[
T=boost::lambda::placeholder<1>
]

そもそも、_1.data()という使い方はできないのでしょうか?
よろしくお願いします。
0319デフォルトの名無しさんNGNG
いcう
0320デフォルトの名無しさんNGNG
int a[10]とint b[10]の中身の一致数を、できるだけ短い式で求めたいのですがどうやりますか?
0321318NGNG
int a[10]とint b[10]の中身の一致数を、できるだけ短い式で求めたいのですがどうやりますか?

int c=0;
>>320
こうでしょうか?
for(int i=0; i<sizeof(a); i++)
for(int j=0; j<sizeof(b); j++)
if (a[i]==b[j]) c++;
0322318NGNG
すいません、なんか、アレでした・・
>>320
>int a[10]とint b[10]の中身の一致数を、できるだけ短い式で求めたいのですがどうやりますか?

int c=0;
for(int i=0; i<sizeof(a); i++)
for(int j=0; j<sizeof(b); j++)
if (a[i]==b[j]) c++;
0323320NGNG
なんかfor文使わずに一行でできませんでしたっけ?
0324デフォルトの名無しさんNGNG
memcmp()だね
0325318NGNG
そうなんですか?
boost配列なら出来そうですけど、それ以外の方法で可能なら、漏れも知りたいです。
0326デフォルトの名無しさんNGNG
>>324
memcmpは一致か不一致かしか判定できない罠
0327318NGNG
>>324
一致個数とか、a[1]==4 と b[2]==4 の一致が検出でき
すいません、横槍でした
0328320NGNG
うーん、できたような気がしたけど勘違いだったかな。
素直にfor文でやります。すいません。
0329デフォルトの名無しさんNGNG
>>318 boost::lambda::bind
0330318NGNG
>>329
ありがとうございます
bool compare(const obj& x,const obj& y)
{
return (x.data()==y.data());
}

obj V("hoge");
find_if(list.begin(),list.end(),bind(&compare,_1,V);

って感じですか?
やってみます.....
0331デフォルトの名無しさんNGNG
C言語学習中の者です。
Windows系のCではconio.hをincludeしてgetch()関数を使用できるのですが、
UNIX系(私の場合はCygwinです)ではcurses.hをinclueしてgetch()を使用できる
ということでソースを書いてみましたが、コンパイルは通るのですが実行すると
「何かキーを押す。」まで表示された後
「Segmentation fault (core dumped)」と表示されて
正常に動作いたしません。

ソースは以下の通りです。
#include <stdio.h>
#include <curses.h>

int main(void)
{
char a;

printf("何かキーを押す。\n ");
a = (char)getch();
printf("何かキーが押された。 ");
return 0;
}

コンパイル時のコマンドラインはこのようにしています。
gcc ソース名 -lcurses

よろしくご教授おねがいします。
0332デフォルトの名無しさんNGNG
素直にint a;でやればいいのに
0333デフォルトの名無しさんNGNG
クラスを外部ヘッダやcppに分割してプログラムを作るとき、using namespace std;というのは外部cppには書かないほうがいいんですか?
main()のあるcppと外部クラスの定義のあるcppのどちらともでusing namespace std;をするのはとりあえずよくないみたいなことを聞いたのですが、理由がよくわかりません。
0334デフォルトの名無しさんNGNG
ttp://pukapuka.s1.x-beat.com/img-box/img20040920061931.lzh
0335デフォルトの名無しさんNGNG
>>333
別にそんなことないよ。
書きたいのなら好きにusing書きなさい。
0336デフォルトの名無しさんNGNG
>>333
名前空間が違うと言う恩恵を拒否し、アナクロニズムに浸りたいと言うのでしたらどうぞご自由に。
0337デフォルトの名無しさんNGNG
>>336
あえてstd空間と衝突する名前を採用する挑戦的な関数・クラスを使わない限り、恩恵はない。
どこの世に、わざわざstdと衝突させたがる人がいると?
標準のC++は、建前が先行しすぎているきらいがある。
0338デフォルトの名無しさんNGNG
てめえが知らない内に衝突してるかも知れねえだろ
特にalgorithmなんかは
0339デフォルトの名無しさんNGNG
>>338
今まで経験ないし、今後もないと思う。
名前が重複したとしても、ほとんどの場合コンパイルエラーが出るだろ。
君は、algorithmと引数まで酷似するような凝った関数使ってるのかね?
0340デフォルトの名無しさんNGNG
>>339
find()
0341デフォルトの名無しさんNGNG
>>339
しら無い間にバグが出来ちゃったりするのが怖いから避けるんだろが
馬鹿かお前は
0342333NGNG
std名前空間の中にある関数やクラスと自分で定義した関数やクラスが衝突する恐れがあるから、std名前空間はstdということをはっきりさせるために
using namespace std;をつかわずにstd::cout見たいな記述をして、見た目にわかりやすくしているってことですかね?
もしかしてmain()のあるファイルでもusing namespace std;を使わないのが普通なんでしょうか?
0343マイク ◆yrBrqfF1Ew NGNG
>>337
標準やモロモロのライブラリの識別子と名前が被ってしまうことを恐れることから解放された
素晴らしいことだな。
0344デフォルトの名無しさんNGNG
>>331
curses使ったことないんで外してるかもしれないですけど,
たぶん使う前に初期化関数とかを呼ばなければならないんじゃないでしょうか?

替わりに
#include <stdio.h>
int getchar(void);
でどうでしょ?

0345デフォルトの名無しさんNGNG
今時CUIで一文字入力(≠1行入力)でもないと思うが…
0346デフォルトの名無しさんNGNG
>>330
find_if (list.begin (), list.end (), boost::lambda::bind (&obj::data, boost::lambda::_1) == "hoge");
0347デフォルトの名無しさんNGNG
C言語の基本的な文法は覚えたので
windows上で動くプログラムを作ろうかと思ってるのですが
参考になるお勧めな本を教えてくれませんか?
ソフトはVisualStudio2003を使ってます。(ソフトは関係ないと思うけど一応
0348デフォルトの名無しさんNGNG
>>342
他は知らないが俺はファイルの先頭でこういう具合にいちいち並べている。
using std::cout;
using std::cerr;
using std::endl;
using std::fstream;
0349デフォルトの名無しさんNGNG
>>348
なるほど、主によく使うものだけをnamespaceを使用しないで省略できるようにしておくのですね。。
参考になります。。。
0350デフォルトの名無しさんNGNG
>>348
いい方法だな。
そのへんの名前はかぶりそうにないし。
0351デフォルトの名無しさんNGNG
入力した文字列を逆から表示するプログラムのソースをオライリーあたりからパクって来てVC++.NETでコンパイル
して、動かそうとしたんですが、表示されるのは1行目だけで、しかも止まりません。
どうすればいいでしょうか?
#include<iostream>
#include<string>
using namespace std;

int main(int argc,char** argv){
      const string delims("\t,.;");
      string line;

      while(getline(cin,line)){
            string::size_type begIdx,endIdx;
            begIdx=line.find_first_not_of(delims);
            while(begIdx!=string::npos){
                  endIdx=line.find_first_of(delims,begIdx);
                  if(endIdx==string::npos){
                  endIdx=line.length();
                  }
                  for(int i=endIdx-1;i>=static_cast<int>(begIdx);--i){
                        cout<<line[i];
                  }
                  cout<<' ';
                  begIdx=line.find_first_not_of(delims,begIdx);
            }
            cout<<endl;
      }
}
0352331NGNG
>>332
>>344

解答ありがとうございます。
残念ながら両方試してみましたがうまくいきませんでした。
今のところUNIX系OSを使う機会は無いので、
Windows系のC言語で学習を続けたいと思います。
0353デフォルトの名無しさんNGNG
>>346
Argument-Dependent-Lookup(ADL)使うともうちょっと幸せ。
find_if (list.begin (), list.end (), bind (&obj::data, boost::lambda::_1) == "hoge");
0354デフォルトの名無しさんNGNG
>>340、>>341
どのような不具合が起こったのか、詳細うpキボンヌ。
でなければ、>>339の言い分が間違っているとは言い難い。
特に>>341の体験談を聞きたいものだ。
0355デフォルトの名無しさんNGNG
階乗プログラムてどんなやつですか??
0356デフォルトの名無しさんNGNG
>>355
こういうの?

template <int N> struct Factorial{ enum{ value = N * Factorial<N-1>::value }; };
template <> struct Factorial<0>{ enum{ value = 1 }; };
int
fact( int n )
{
    int fact = 1;
    for( int i = n; i >= 2; --i )
        fact *= i;
    return fact;
}
int
main()
{
    std::cout << Factorial<0>::value << std::endl;
    std::cout << fact( 0 ) << std::endl;
    return 0;
}
0357デフォルトの名無しさんNGNG
>>356
まだ関数ちょっとかじったばっかまでしかわからない初心者なんですが
>>356のはわからないことが多すぎるんで
具体的にどうゆうのが階乗プログラムか教えていただければ幸いです・・・
0358デフォルトの名無しさんNGNG
>>357
漏れは階乗プログラムなんて名詞知らないヘタレPGなんで
階乗を求めるプログラムを書いてみただけw
0359デフォルトの名無しさんNGNG
>>358
そうですか・・・何とか自力でしらべまくってみます・・
わざわざ夜分遅くにご教授ありがとうございましたー
0360 ◆FIcNi4f8js NGNG
n! = n・(n-1)!
0361デフォルトの名無しさんNGNG
>>360
無限ループ
0362デフォルトの名無しさんNGNG
n! = n・(n-1)!
だろ?

int
fact( int n )
{
if(n<=1) return 1;
return n*fact(n-1);
}
ぢゃねの?
※intでいいのか、とか、マイナスの場合どうすんの?とかがあるが
0363デフォルトの名無しさんNGNG
n! = n・(n-1)! ... n >= 1のとき
n! = 1 ... n == 0 のとき

終了条件無いとだめだって
0364デフォルトの名無しさんNGNG
数学的にも
n! = n・(n-1) (n>=1)
だな
ま、揚げ足取りだけどさw
0365デフォルトの名無しさんNGNG
階乗を求めるプログラムは再帰の例としてよく出てくるが
別に再帰じゃなくて単なるループでもいいのよ

int fact(int n)
{
  int f = 1;

  for (int i = 1; i <= n; i++) {
    f *= i;
  }

  return f;
}
0366デフォルトの名無しさんNGNG
再帰の例としては分かりやすいけど、駄目な使い方の例でもあるな
再帰を使わなくても簡単に書けるのならば、そう書くべき
0367デフォルトの名無しさんNGNG
じゃあフィボナッチ数列とかにしたら?
これも反復で書けるけどね

fib(n) = fib(n-1) + fib(n-2) ... n >= 3
fib(n) = 1 ... n = 1,2
0368366NGNG
>>367
再帰的定義だからといって、再帰がいいとは限らない
なんか、Efficient C++ を思い出しますなあ
(単一引数を取るinline再帰関数にリテラルを渡すことにより、
最適化によってはコンパイルタイムで計算されるというやつ)
0369デフォルトの名無しさんNGNG
>>354
不具合なんか起きるもんかね。起きるのがイヤだから回避策をとってるのに。
転ばぬ先の杖って言葉知ってる?
0370デフォルトの名無しさんNGNG
>>369
それはstdと同じ名前の関数・クラスは作らない、暗黙ルール的な解決策って意味かな?
0371デフォルトの名無しさんNGNG
std::つけるって話だろ?
0372デフォルトの名無しさんNGNG
>>370
プゲラ
0373デフォルトの名無しさんNGNG
> プゲラ
頭悪そう
0374デフォルトの名無しさんNGNG
なんだか知らないけどここにもウィルス置いときますね
ttp://pukapuka.s1.x-beat.com/img-box/img20040920215205.lzh
0375デフォルトの名無しさんNGNG
>>351
自己解決しました。単なる写し間違いでした…orz
ちなみに下から5行目です。
×begIdx=line.find_first_not_of(delims,begIdx);
○begIdx=line.find_first_not_of(delims,endIdx);
0376デフォルトの名無しさんNGNG
>>375
> 5行目
> 5行目
> 5行目
> 5行目
0377デフォルトの名無しさんNGNG
>>376
なんだこいつ
0378デフォルトの名無しさんNGNG
てんかん発作か何かでしょ。
0379デフォルトの名無しさんNGNG
class A
{
virtual void func(const int& i) =0;
}
の、=0ってどういう意味があるんですか?
0380デフォルトの名無しさんNGNG
>>379
キーワード 純粋仮想関数
0381デフォルトの名無しさんNGNG
C++の勉強をしようと思ったら、友達に、「Javaの勉強してからC++をしなさい」って、言われました。
なぜですか?
0382デフォルトの名無しさんNGNG
ヽ(`Д´)ノ友達に聞け!
0383Ruby >>>>>>>>>>>>> C++NGNG
C++の勉強をしようと思ったら、友達に、「C++なんて問題外^^;;;;」って、言われました。
なぜですか?
0384デフォルトの名無しさんNGNG
>383
その友達は「C++は問題外」でなくて、本当は「C++は理解の外」って意味でしょう。
頭の悪い友達を持って、君は不幸ですね。
0385デフォルトの名無しさんNGNG
>>384
その子頭は確かに悪いんだけど、顔と体は最高なんです・・・
0386デフォルトの名無しさんNGNG
>>385
そうですか。人はそれぞれ取り柄があるので、その子の長所を最大限に
引き出す事を考えれば君は幸せになれるでしょう。
0387デフォルトの名無しさんNGNG
const なのに int を参照で渡す意味ってあるの??
0388デフォルトの名無しさんNGNG
>>387
intが1280ビットほどあれば意味があるかも。ポインタのサイズ<<intのサイズでないと
だめだけど。
0389デフォルトの名無しさんNGNG
何度聞いても「ブラック ロ・リ・コ・ン!」としか聞こえん……
0390デフォルトの名無しさんNGNG
>>389
耳鼻科へ
0391デフォルトの名無しさんNGNG
385はいかにその子の長所を伸ばすのか。気になる。
0392デフォルトの名無しさんNGNG
C++での先行宣言?は、
class A;
class B { A a; };
class A { B b; };
でいいのでしょうか?
0393デフォルトの名無しさんNGNG
いいよ
0394392NGNG
>>393
ありがとうございます。
インテリセンスでのコード補完がB内のメソッドで効かなかったので心配でした。
0395デフォルトの名無しさんNGNG
コンパイルできないだろう。
0396デフォルトの名無しさんNGNG
ポインタをメンバにしろ。
class B { A* a; };
class A { B* b; };
インスタンスをメンバにしたらコンパイルできない。
0397デフォルトの名無しさんNGNG
デフォルトコンストラクタ実行しちゃうもんね…
0398デフォルトの名無しさんNGNG
そういう問題じゃない。
class A, Bが互いに相手のインスタンスをメンバにしたら
無限循環が起きるだろうが。

要は、「自分の型へのポインタ」はメンバに出来るが
「自分の型のインスタンス」はメンバに出来ないってのと同じ。
0399デフォルトの名無しさんNGNG
仕事でC99準拠のコンパイラを作ることになったんですが
C99で書いたソースの拡張子は一般的に.cなんでしょうか?
0400デフォルトの名無しさんNGNG
.c99
0401392NGNG
>>395-398
ありがとうございます。
実際、コンパイルが通らなかったのですが、まったく違うところで、顔を真っ赤にして悩んでいました...orz
0402デフォルトの名無しさんNGNG
>>400
ありえない
0403デフォルトの名無しさんNGNG
.Ruby!
0404399NGNG
>>400
まじっすか

たぶんC++も実装することになると思うんで追加でお聞きしますけども
C99のライブラリヘッダとC++の<c.*>ヘッダって共用できなくないですか?
無理に共用させるとすればrestrictとかマクロで逃げるよりほかないとか…
0405デフォルトの名無しさんNGNG
>>404
おいおい。>>400はあからさまにネタだろうがよ。
それと普通のコンパイラに付属しているヘッダ類をみれば
わかると思うけど、たいていはマクロでC/C++の場合わけはしてる。

#ifdef __cplusplus
 extern "C" {
#endif

最低限必要なのは↑みたいにリンケージにかかわるところとか、
名前空間の違い(Cの標準関数は名前空間stdに配置)を
吸収する部分くらいかと思う。
0406デフォルトの名無しさんNGNG
お前ら、「x^=y^=x^=y」でxとyの値を入れ換えることができるのは
どうしてかわかりやすく説明していただきたいのですが。
0407デフォルトの名無しさんNGNG
>>398
ポインターに格納するのはアドレスというただの数値だもんね。
0408デフォルトの名無しさんNGNG
>>406
未定義
0409デフォルトの名無しさんNGNG
>>406
x^=(y^=(x^=y))
0410デフォルトの名無しさんNGNG
>>409
ああなるほどそういうことか!さんくす!
0411デフォルトの名無しさんNGNG
^x^=(^y^=(^x^=^y^))
0412デフォルトの名無しさんNGNG
char型の文字列とString型の文字列の違いって何ですか?
また、変換する方法はありますか?
0413デフォルトの名無しさんNGNG
s=(LPCTSTR)chstr
0414デフォルトの名無しさんNGNG
>>412
CStringのことかAnsiStringのことかはたまたstd::stringのことか
はっきりせんが(てか、質問するときは環境をちゃんと書け)。

char配列は組込み型でStringはクラス。
よって前者は環境に依存しないが後者は環境依存。

また後者はメンバ関数が用意されているので

String hoge = "hoge"; //const char* → String
char hogetta[5];
strcpy( hogetta, hoge.c_str() ): //String → char*

てな具合に相互変換できる。
0415デフォルトの名無しさんNGNG
>>414
すみません。stringはstd::stringの事だと思います(using namespace std;とやっていればstringはstd::stringになりますよね?)
char*→stringはそのままString型に代入、string→charはc_strを使えばいいんですね。
ありがとうございました。
0416デフォルトの名無しさんNGNG
>>415
「だと思います」「stringはstd::stringになり」「char*→stringはそのままString型に」
↑ここらへんがプログラムに向いて無さそう。
文系の人なんだろうか。
0417デフォルトの名無しさんNGNG
文系でも普通に頭のいい人は「質問するときは環境をちゃんと書け」を
読み落としたりしないし、キャピタライズにもちゃんと注意する。

文系理系よりも頭の良し悪しの方が遥かに重要って、当たり前の話だな。
0418デフォルトの名無しさんNGNG
お前らアホか?
この場合頭の善し悪しじゃねーだろ
単に>>412がプログラミングに向いていないというだけのこと
頭のいい、悪いはまた別問題
0419412NGNG
C++は始めたばかりでよくわからないんです。
環境といわれてもstringにいくつか種類があるなんて知りませんでしたし。
すみませんでした。
0420デフォルトの名無しさんNGNG
スレタイの「初心者」っていうのは何処らへんまでが「初心者」として定義されるんだろう・・・・
0421デフォルトの名無しさんNGNG
手厚く歓迎してるよ。みんな。
0422デフォルトの名無しさんNGNG
少なくとも曖昧な質問の仕方をする辺りがプログラマに向いてないと。
0423デフォルトの名無しさんNGNG
てか、「始めたばかり」の頃って、質問することなんか殆ど無くないか普通?
複雑さの無いシンプルな知識を本とかネットのリファレンスで吸収しまくる
単純作業っぽい学習の時期で、人に訊くことなんて何も無いと思うんだけど・・・。
0424デフォルトの名無しさんNGNG
C++勉強し始めて日が浅いのですが、C++(Javaも)でクラス名を小文字から始めるのは
あまり勧められたものではない、となっているのかな?
hoge::ClassName object;
hoge::class_name object;
(hogeはnamespace)なんとなく大文字小文字ででこぼこするなぁ、と思ったもので。
非推奨スタイルならさっさと改めます。
std::系やboostなどは標準ないしそれに近いものとして例外とされるのかな。
0425デフォルトの名無しさんNGNG
STL系のhoge_hoge、WinAPIのHogeHogeとスタイルがかぶらないように
Java系のhogeHogeという命名は結構使われてたりする
0426デフォルトの名無しさんNGNG
当方、「これならわかるC++」小林健一郎著をみてプログラムしているものですが、
最初のコードすら実行できません。MS-DOSプロンプトで実行すると、
以下4つのエラーが発生してしまいます。
エラー E2209 hello.cpp 1:インクルードファイル'iostream'をオープンできない
エラー E2282 hello.cpp 2:名前空間名が必要
エラー E2451 hello.cpp 6:未定義のシンボル cout(関数 main())
エラー E2451 hello.cpp 6:未定義のシンボル end1(関数 main())
どなたか解決法をお教えくださらないでしょうか?
0427デフォルトの名無しさんNGNG
>>426
bcc32.cfgにインクルードパスが設定されていない

ここ嫁
http://www.borland.co.jp/cppbuilder/freecompiler/faq/bccfaq4.html
0428デフォルトの名無しさんNGNG
>>427
”インクルードファイルやライブラリファイルの場所を指定したBCC32.CFGを作成しなければなりません。”
どういう意味でしょうか?マイコンピュータ→システムのプロパティ→詳細設定
→環境変数でPathを選んで編集、既存の変数値に;C:\Borland\Bcc55\Binを付け加えたのですが
それとは違うんですか?
0429デフォルトの名無しさんNGNG
> ”インクルードファイルやライブラリファイルの場所を指定したBCC32.CFGを作成しなければなりません。”

その直後に書いてあるだろ
0430デフォルトの名無しさんNGNG
>>429
BCC32.CFGをどこにどうやって作るんですか?
0431デフォルトの名無しさんNGNG
ホームラン級の無能
0432デフォルトの名無しさんNGNG
何でそこまで言われなきゃいけないんだよ!
URL張ってくれてありがとな。
けどむかつくぜ!
0433デフォルトの名無しさんNGNG
>>432
文章を読めないのが無能以外のなんだというのだ
0434デフォルトの名無しさんNGNG
文章は読めるよ。何でお前に無能なんていわれなきゃいけないんだよ。
嫌な奴だな
0435デフォルトの名無しさんNGNG
>>430
http://software.nikkeibp.co.jp/software/special/bcc_install/bcc_install.html

ひとを品定めするような書き方は良くないっすよ。
0436430NGNG
>>435
上手く実行出来ました。有難うございます。
わざわざ手数のかかることをしてもらってすみません。
”ひとを品定めするような書き方”ってどういう意味です?
0437デフォルトの名無しさんNGNG
>434みたいな書き方しておいて、マジで>436のように判っていないのだとしたら、
おこちゃまなんだろうな、とは思う。
#げ、読点多くて頭悪そw
0438デフォルトの名無しさんNGNG
旧Cライブラリの関数を呼び出すときは ::HogeFunc() のように::を一つ一つ付ける方が良いですか?
0439デフォルトの名無しさんNGNG
>>416 >↑ここらへんがプログラムに向いて無さそう。
>>418 >単に>>412がプログラミングに向いていないというだけのこと
>>431 >ホームラン級の無能
>>437 >おこちゃまなんだろうな、とは思う。
この辺の書き込みは質問者の弱い立場を利用した中傷でしかないので、しない方がいいですよ。
(421さんの言う「手厚い歓迎」?)
まぁ、みなさんなんやかんやでよく答えてるのでエライとは思います。
番号上げた方ごめんなさい。
0440435,439NGNG
名前をメール欄に書いちまった。439は435です。
0441デフォルトの名無しさんNGNG
>>439
プログラムに向いてない人がプログラマになったら、不幸だとは思わないのか?
好きならいいじゃないかと思うかもしれないけど、本人だけの問題じゃないんだぞ。
0442デフォルトの名無しさんNGNG
>438
全部に付けるのはめんどくさいんで、
紛らわしいものだけに付けます(自分は)
0443マイク ◆yrBrqfF1Ew NGNG
>本人だけの問題じゃないんだぞ。

どんな問題だ?
0444434NGNG
>>437
わかるわけねーだろあほ。
何がおこちゃまだよ。俺は無能と言われたんだぞ。
目の前で言ったら殺されても仕方ないぐらいのことを言われてんだ。
黙ってられるかよ。俺の理解力が無くて教える気がなくなったんなら、
「これ以上簡単には教えようが無い」ぐらいの事を言って終わりにすれば
いいだろう。自尊心を傷つけられてなんで黙ってられるんだよ。
俺だって場所を考えて聞いてるんだ!
0445デフォルトの名無しさんNGNG
まぁ、頭は悪いが自尊心はあると。
それで開き直れるのも2chだからだな。

いや、それでもなんでも、馬鹿にする人間が居る代わり
回答してくれる人間も居るんだからそれでいいじゃん。
実生活じゃこうはいくまい。
0446デフォルトの名無しさんNGNG
だね。相手の顔が見えないからって粋がるなよ。
聞かれる前に答えるが、私はリアルでも言いたいことは言って生きてきているよ。
0447デフォルトの名無しさんNGNG
>>446
いいたいこと言って生きてちゃだめだろ。
0448デフォルトの名無しさんNGNG
お前は誰がどうみても無能と呼ばれるような聞き方をしてたぞ。
はっきり無能と指摘してくれるのもここならでは。
リアルでは誰もそんなことは言ってくれず、心の中で「こいつ無能だな」と思われるだけ。
これを機に自分を見直せ。
0449デフォルトの名無しさんNGNG
横レスだが。

にっこり笑顔で「次の行に書いてあるよ」といいつつ青筋立ててしまいそうな未熟者の漏れ。
酒の席とか、本人の居ないところであいつは駄目だと上司/同僚に愚痴りそうだ。
0450デフォルトの名無しさんNGNG
>>449
うむ。
お前はそういうタイプだ。
0451434NGNG
>>448
ふざけるな
0452デフォルトの名無しさんNGNG
>>448
しかし、2chなら堂々と言えるぞ。
>>448無能だなw
0453デフォルトの名無しさんNGNG
教えて君が逆切れするスレはここですか。
0454デフォルトの名無しさんNGNG
bccのパス設定が難しい人は、このツールを使うといいと思う。
http://www.vector.co.jp/soft/win95/prog/se149182.html
0455434NGNG
>>445
俺は頭悪くないから。手順がわからないから聞くのがどうして頭悪いんだよ。
嫌な奴ばっかだ
0456デフォルトの名無しさんNGNG
>>455
手順がわからなくて2chで聞くのが無能以外の何者だというんだ?
C/C++の仕様とかなら膨大すぎるからキーワードくらいのヒントは聞くのはしかたないし、
このスレの存在意義はそこにあると思うけど、
長くも無い説明文に堂々と書いてることを聞くってのは日本語がわかってないとしか思えんじゃないか。
0457デフォルトの名無しさんNGNG
>>455
自分の頭の悪さに気が付いてないって点で、既に頭が悪い。
将来悲惨だよな、お前。痛いよ。
0458デフォルトの名無しさんNGNG
大部分の頭の良くない普通の人は
人に聞かなくても独力で手順を調べる事はできるんです
それが出来ないあなたは、頭が悪くないとしてもやや頭が悪いといわざるを得ないでしょう。
0459デフォルトの名無しさんNGNG
>俺は頭悪くないから

「...お前、クスリやってるだろ?」
「や、やってねーよ」

みんな否定するんだよな
0460434NGNG
もうええわ

0461デフォルトの名無しさんNGNG
>>446
>>447
ワラタ

0462434NGNG
俺は頭悪くないから。手順がわからないから聞くのがどうして頭悪いんだよ。
嫌な奴ばっかだ

もうええわ
0463デフォルトの名無しさんNGNG
>>455
手順がこと細かく書いてあるページを教えてもらってるのに、よく読まずに質問するから
無能と呼ばれるんだよ。
0464434NGNG
俺は頭悪くないから。手順がわからないから聞くのがどうして頭悪いんだよ。
嫌な奴ばっかだ

もうええわ
0465デフォルトの名無しさんNGNG
板のレベルを考えなかったお前の負けだな。
あきらめろ。
質問するならもっと簡単なのにしとけ。
0466デフォルトの名無しさんNGNG
>>465
だな
0467デフォルトの名無しさんNGNG
俺は頭悪くないから。手順がわからないから聞くのがどうして頭悪いんだよ。
嫌な奴ばっかだ

もうええわ
0468デフォルトの名無しさんNGNG
2ちゃんはクソ
0469デフォルトの名無しさんNGNG
Ruby以外は糞
0470デフォルトの名無しさんNGNG
今さらあれだけど、確認しておくぞ。
2chには、人を不快にするのが好きな人間が屯している。
だから一般の香具師は、それを無視できなければならん。
耐えるしかないんだ。わかったな。

わかったら次の質問をしろ。
0471デフォルトの名無しさんNGNG
2chにはスレ毎に雰囲気がある。
雰囲気は各人の投稿の集約だが各人の投稿が雰囲気に影響されるのもまた事実だ。
人を不快にする発言が憚れる雰囲気を作って行きましょう。
0472デフォルトの名無しさんNGNG
今更な質問よかですか?

deleteとdelete[]の明確な違いってなんでしょう?
X *pX= new X[5];
delete pX;
ってやったらどうなんの?

もう一点。
それは処理系による違いってある?
0473デフォルトの名無しさんNGNG
ttp://www.kurumi.sakura.ne.jp/~kumicyou/cplusplus/0805.html
>挿入子のオーバーロードは自動インラインである事が必要なのか?
なのでしょうか・・・・?
僕も同じところではまっています・・・・
よろしくお願いします。
0474デフォルトの名無しさんNGNG
>472
pX[0]だけdeleteされて他は残る
0475デフォルトの名無しさんNGNG
>>473
g++だと
クラス外で定義してもエラーは出ないですね.
規格では?

ところで「自動インライン」って言うんですか? これ.
0476472NGNG
>474
え。。。
マジ!?

酷いな。。。
ありが�d。
0477デフォルトの名無しさんNGNG
>>476
コンパイル時にはエラーにならなかったりするので注意すべし。
不安だったらテストコード書いとけ。
ちょうどCマガ10月号にnew/deleteをオーバーライドして解放忘れがないかチェックするネタがあるぞ。
0478473NGNG
>>475
ありがとうございます。
うーん、コンパイラオプションとかでしょうか・・・
VC.net2003で試しているんですが、エラーはきますorz
>自動インライン
インライン展開とかでしたっけ?
inlineキーワードつけないといけなかったんですよね、確か。違ったっけ。
0479デフォルトの名無しさんNGNG
>>473
俺様用語満載で胡散臭いな。
0480デフォルトの名無しさんNGNG
>>472
deleteは非配列形式のnewで生成されたオブジェクトの削除。
delete[]は配列形式のnewで生成されたオブジェクトの削除。

> X *pX= new X[5];
> delete pX;
未定義。
もちろん処理系による違いは有り得るが、飽くまで未定義。
>>474はどっかの処理系においての一例と見るべき。
0481デフォルトの名無しさんNGNG
delete[] とするところを delete ってするのは未定義ですよ
0482デフォルトの名無しさんNGNG
>>478
#include <iostream>
using namespace std;
class cls
{
int i;
public:
friend ostream &operator <<( ostream &s, cls o );
};
ostream &operator <<( ostream &s, cls o )
{
s << o.i << endl;
return s;
}
VC7.1でコンパイルできた。
>自動インライン
これはおそらく、クラス定義内にメンバ関数定義を記述することを指している。
このように定義されたメンバ関数はinline扱いになる。
0483デフォルトの名無しさんNGNG
今思った
struct hoge{
    virtual void hogefunc(){}
}
ってやるのは virtual をインラインにしてるから良くないの?
struct hoge{
    virtual void hogefunc();
}
void
hoge::hogefunc(){
}
ってやるべき??
0484デフォルトの名無しさんNGNG
別にvirtualをインライン化しても悪くないだろ。
展開できるところは展開されるかもしれないし、遅延束縛もちゃんと機能する。
0485473NGNG
>>482
コンパイル通りますか・・・
うーん、どうも、違う部分で間違ってる感じですね・・・
ありがとうございます。
もう一度、ソース頭から眺めてみますorz
0486デフォルトの名無しさんNGNG
rand()関数についてお尋ねします。
1と-1の乱数が欲しかったので,rand()を使い
(rand() % 2) *2 -1
として,取り出しました。
本当に散らばっているか,100個くらい表示させてみたのですが,
何度やっても交互に並んでしまいました。
srand(time(NULL))と種を与えた場合も,与えない場合も結果が変わりませんでした。
2種類の数字をランダムに得る方法は何かありませんでしょうか?
0487デフォルトの名無しさんNGNG
rand() % nはあまり性質の良い乱数にならない。
rand() > RAND_MAX/2 ? 1: -1を試してみてくれ。
0488デフォルトの名無しさんNGNG
>>486
最下位ビットは必ず交互に変わるアルゴリズムなのだろう。
なので、上位の方のビットを使えばましになるはず。
0489デフォルトの名無しさんNGNG
#include <iostream>
#include <ctime>
#include <boost/random.hpp>

int
main()
{
    typedef boost::mt19937 myengine;
    typedef boost::uniform_int<> mydistribution;

    myengine mt( static_cast<boost::uint32_t>( std::time( NULL ) ) );
    mydistribution ui( 0, 1 );
    boost::variate_generator<myengine, mydistribution> myrand( mt, ui );

    for( int i = 0; i < 100; ++i )
        std::cout << myrand() * 2 - 1 << std::endl;

    return 0;
}
0490デフォルトの名無しさんNGNG
>>487-488
教えていただいたようにしましたら,無事解決しました。
ありがとうございました。

# 教えていただいたことをヒントに少し調べてみましたら,
# Linuxのマニュアルには上位ビットを使うように,と書いてあるそうでした。
0491489NGNG
漏れは参考のさの字にすらならなかったのか・・・(´・ω・`)
0492C++勉強中NGNG
処理の内容でなく関数名の付け方についてなのですが、
もとの図形を拡大回転した新しい図形を返す関数としてrotozoom()を実装したとします。
Shape *rotated = source->rotozoom(1.0, PI * 3);
のような感じで使うとして、今度は自分自身を回転する関数名はどう付ければ???
shape->rotozoom() //rotate&zoom and set itself
のように使いたい。
source->set_hoge(source->rotozoom());
とやればいいやん、とは思ったものの、内部の処理の関係上できれば独立させたいなと。
rotozoom_self ???
0493デフォルトの名無しさんNGNG
>>491 参考にして欲しくて書いたんじゃないだろ。
0494デフォルトの名無しさんNGNG
>>492
http://pc5.2ch.net/test/read.cgi/tech/1087209526/
0495デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>>> らんd
0496デフォルトの名無しさんNGNG
>>494
サンクス移動します。
0497486NGNG
>>491
大変失礼致しました。
新着レスを調べずに,実験およびレス書きを行ったため,
アドバイスをいただいていたことに気がつきませんでした。
私如きでは今見ただけではよくわからないのですが,
いつか役立たせていただきたいと思います。
0498デフォルトの名無しさんNGNG
>>497
今すぐにでも出来るよ
この辺でもご参考に
http://www.kmonos.net/alang/boost/
0499デフォルトの名無しさんNGNG
C++で作られた.exeファイルのソースを表示するソフトみたいなのありますか?
0500デフォルトの名無しさんNGNG
るby!!!!!!
0501デフォルトの名無しさんNGNG
>>499 ありません。
0502デフォルトの名無しさんNGNG
class Hoge{
 int n;
public:
 Hoge(){ n = 1; }
 int get(){ return n; }
};
int main(){
 Hoge h;
 return h.get();
}

こんな簡単なクラスでもget()を読んだ箇所の
アセンブラを見てみるとcallの字があるのですが、
これはたぶんインライン展開されて無いですよね?いやされてるんでしょうか。
0503デフォルトの名無しさんNGNG
癒されてません
0504502NGNG
コンパイラのスイッチが入ってないだけみたいでした
書きこんだ瞬間に気づく悲しさ
0505デフォルトの名無しさんNGNG
コピーしてるからじゃないの
0506デフォルトの名無しさんNGNG
>499
無ければ自分で作る!
0507デフォルトの名無しさんNGNG
今独習CでCの基本を勉強しているんですが、それが終わったらC++の勉強を始めるべきでしょうか?
これからいろいろ利用していくことを考えるとC++の方を重点的に勉強しておいたほうがいいような気がするんです。
将来はWindows用の本格的なアプリケーションも作っていきたいと考えているので、
VCの解説でよく使われるC++の方がいろいろ便利な気がします。
しかし、せっかくCの基本を覚えたんだから、それを深く学んでいく方がいいのかもしれません。
皆さんの意見を参考にしたいのですが、どっちの方がいいと思いますか?
0508デフォルトの名無しさんNGNG
>>507
将来的なことを考えたらC/C++以外の言語を習得したほうが良いかもしれん。
特にWindowsアプリの開発ならC++にこだわる必然性は無い。

ということを頭に入れた上で。

C++は純Cに比べて遥かに仕様が膨大で、その理解にはオブジェクト指向の
理解が不可欠。つまり習得するには非常に時間がかかる。

オレが勉強してたときはjavaなんて無い時代だから半ば必然的にC++の勉強したけど、
いまの若い人には正直あんまり勧める気はしない。

あ、Cの勉強は無駄にはならんぞ。
0509デフォルトの名無しさんNGNG
>>490
遅レスだけど、線形合同法による乱数生成だとそうなる。
最近のライブラリはMT(メルセンヌツイスト)導入したものも多いので、
そういうのならそんな性質はないので興味があったら調べてみるのも一興。
0510デフォルトの名無しさんNGNG
っていうかmanにちゃんと書いてある…
"If you want to generate a random integer between 1
and 10, you should always do it by using high-order
bits, as in

j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

and never by anything resembling

j=1+(rand() % 10);

(which uses lower-order bits)."
0511デフォルトの名無しさんNGNG
>>508
釣りか?
もしくは、スポーツ選手などと同様で40代前に引退する羽目になるのが嫌だから、
新規参入する若手を減らして競争率を下げたいのかwwwww?

>>507
今や、いきなりC++から入るべきだよ。
Cだけに触れるのは最初だけ。
C++のiostream系はほとんど覚える必要なし。というか時間の浪費。
ポインタ→構造体→自力リスト→自力クラス/MFC/STL→あとは人それぞれ
0512デフォルトの名無しさんNGNG
>C++のiostream系はほとんど覚える必要なし。というか時間の浪費。
>ポインタ→構造体→自力リスト→自力クラス/MFC/STL→あとは人それぞれ

このレベルだと今時C++を使う意味は無いだろ。
0513デフォルトの名無しさんNGNG
配列の引き算の結果について質問なんだけど
T arr[N];
(&arr[N]-&arr[0])ここの結果っていつも「N」になるのが仕様なんですか?
要素数を求めるには最近までsizeof(T*)で割らなきゃあかんと思っていたんだけど違ったんだね。
スレの住人さん仕様なのかどうか?教えてYo。
一応環境はVC7.1、W2KですYo。
0514デフォルトの名無しさんNGNG
あと最近まで要素数求めてた方法はdefineかテンプレート使ってたから引き算なんて初めて挑戦したんですよね。
0515デフォルトの名無しさんNGNG
>>513
仕様ですよ。
sizeof(T*)で割るのは、最適化が期待できないコンパイラでも
定数の畳み込みを期待できるからです。
0516デフォルトの名無しさんNGNG
>>515
ありがとう。スッキリしたYo。
そうか、俺の脳内仕様が古かったのね。
0517デフォルトの名無しさんNGNG
実行ファイルからソースプログラミングを見る方法ってありますか?
0518デフォルトの名無しさんNGNG
�_
0519デフォルトの名無しさんNGNG
以前からの疑問なのですが
「リスト等を全検索して、一つも該当の対象が無ければ処理を終え、該当があれば処理を続ける」

というのを綺麗に実装する方法はあるのでしょうか

gotoを使ったり、小さい関数に分けるなら私にも思いつくのですが…
(useGoto()、及び useSmallFunc()は、配列に8があれば処理を続ける)

int array[10] = { 1, 3, 5, 8, 9, 2, 6, 0, 7, 4 };

void useGoto()
 for( int i=0; i < 10; ++i ){
  if( array[i] == 8 ) goto GOES_ON;
 }
 return; //処理中止
GOES_ON:
 printf( "処理を続ける" );
}

void useSmallFunc(){
 if( small_func( array, 10 ) )
  printf( "処理を続ける" );
 else
  return; //処理中止
}
bool small_func( int* array, int size ){ //順序が逆ですが
 for( int i=0; i < size; ++i ){
  if( array[i] == 8 ) return true;
 }
 return false;
}
0520519NGNG
続きです

void useFrag(){
 bool flag = false;
 for( int i=0; i < 10; ++i ){
  if( array[i] == 8 ) flag = true;
 }
 if( ! frag ){
  return;
 }
 printf( "処理を続ける" );
}
0521デフォルトの名無しさんNGNG
>>519
for(;;) {
 for( int i=0; i < size; ++i ) {
  if( array[i] == 8 )
   break; // ループから抜ける
 }

 // 処理
}

こう?
0522519NGNG
>>521
レスありがとうございます
しかしすいません、私の理解が足りないせいか、それだと

・配列に該当の対象(数字の8)が有っても無くても、処理が続いてしまう
・無限ループになってしまう(処理でもう一度breakするのでしょうか)

様に思えてしまって。
0523デフォルトの名無しさんNGNG
IDみたいなものを定義したいのですが,

enumでするのがいいでしょうか?
それとも#defineでするのがいいのでしょうか?

#define ID_A 100
#define ID_B 200

enum {
ID_A = 100;
ID_B = 200;
}

どっちでやるか迷います
0524デフォルトの名無しさんNGNG
>>522

> しかしすいません、私の理解が足りないせいか、それだと

>>521の理解が足りないだけなので御気になさらずに
0525デフォルトの名無しさんNGNG
>>523
IDだったらenumの方が良い。
ちなみに、定数にdefineを使う場合があれば、なるべくconst intに置き換えるべき。
0526523NGNG
>>525
すばやいレスウンコー!(゚∀゚)!
0527523NGNG
すいません
サンクスって書こうとしたらなぜか
間違った変換になりました
0528521NGNG
>>521は忘れて
0529デフォルトの名無しさんNGNG
>>526-527
ワロタ
さてはプロだな (界王様 風)
0530デフォルトの名無しさんNGNG
>>526
これ、お前か?w

評価: 非常に良い 落札者です。評価者は mana_chiyo (819)
井上和香 DVD「和香物語」 美品( ^-^) (7月 3日 23時 0分)

出品者は「 非常に良い 」と落札者を評価しました。

コメント:商品が届き安心しました。この度は迅速な対応ウンコー!(゚∀゚)!ございました。
またの機会を楽しみにしています。 (7月 12日 18時 46分)

コメント:すみません。僕の辞書が勝手に変な変換をしてしまい、
不快感を与えるコメントをしてしまい大変申し訳ございません。
この度は迅速な対応ありがとうございました。 (7月 12日 19時 7分) (最新) [返答]
0531デフォルトの名無しさんNGNG
>>530
ワラタ
0532デフォルトの名無しさんNGNG
>>530
You are shine!
0533デフォルトの名無しさんNGNG
ちょっとー笑いすぎて腹痛いんですけど
0534デフォルトの名無しさんNGNG
質問があります。
C++でクラスを作る方針としてクラスは小さい方がいいと聞いたんですが、
クラスごとにファイルを作るとすると、
ファイルがめちゃくちゃたくさんになってしまいます。
皆さんは1つのクラスごとにソースファイルとヘッダファイルを作っておられますか?
0535デフォルトの名無しさんNGNG
>>519
エレガントにか?
C++なら
if(std::find(array, &array[10], 8) != &array[10])
 見つかった時の処理
で一発きめれるけど(要するにusefuncかな)
Cなら単純に
for(int i=0; i<10; ++i){
 if(array[i]==8){
  見つかった時の処理
break;
}
cout<<i<<' ';
}
0536535NGNG
ごめん間違った続き
Cなら単純に
for(int i=0; i<10; ++i){
 if(array[i]==8){
  見つかった時の処理
 break;
 }
}
でしょ。間違ってshift+Enter押しちゃった。
0537デフォルトの名無しさんNGNG
>>534
作らない。
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/qid=1096270912/sr=1-1/ref=sr_1_18_1/249-7749404-9276354
この本読めばわかる。読まなくてもいいけど。
要するに自分がこのクラスとこのクラス(あるいは関数)は深く関連があるなと思えば一緒のヘッダで宣言するだけの話。
0538デフォルトの名無しさんNGNG
>>537
> 作らない。

即レス、ご教授感謝します。
関連があるクラスは一つにまとめるんですか。
(まとめすぎてヘッダファイルが大きくなってしまう場合は、どうなるんでしょうか)

この本は早速買ってきますw
0539519NGNG
>>524 >>528
なんだか今見返すと、嫌みっぽくて、すいませんでした。
本当に習いたてで、右も左も分からないだけですので…。

>>535-536
C/C++以前勉強してたのがBasic(VBではなく)だったので、
どうしてもGOTOによる流れが真っ先に念頭に浮かんでしまいました。

そのままifの条件文内で処理すれば良かったのですね。
STLも勉強してみます。レスありがとうございました。
0540デフォルトの名無しさんNGNG
class Derived : public Base
{
public:
Derived() : Base() {} //これ
}
派生のコンストラクタに使うあの右の奴の事をなんて言うものですか。
コンストラクタ以外でも使えますか?
Derived() : Base::Init() {}
とか
0541デフォルトの名無しさんNGNG
>>540 右の奴の事はコンストラクタ初期化子と呼ぶが、別に「派生の」
に限らない
0542デフォルトの名無しさんNGNG
デフォルトコンストラクタとコピーコンストラクタがあればできなくは無い。
Derived() : Base(Base().Init()) {}

Derived() : {Base::Init()}
じゃいかんのか?
0543デフォルトの名無しさんNGNG
ネームスペースが二文字というのは短すぎますか?

namespace xx;
namespace xxx;
namespace xxxx;
namespace xxxxx;
namespace xxxxxx;
0544デフォルトの名無しさんNGNG
>>543
区別できるなら別に構わないと思います
0545デフォルトの名無しさんNGNG
それに短い方が打ちやすい
5文字までなら許せるけど6文字以上からは毎回打つにはちとキツイし
0546デフォルトの名無しさんNGNG
C++において宣言と定義について詳しく教えてくれませんか?

int a; は宣言で

int a = 0; は定義?
0547デフォルトの名無しさんNGNG
>>546
ググれやカス
0548デフォルトの名無しさんNGNG
>>546
マジレスすると宣言でつ
0549デフォルトの名無しさんNGNG
>547
定義でもある宣言とか書いてあってよく分からないんです
0550デフォルトの名無しさんNGNG
int a;
a=0;
と同義w
0551デフォルトの名無しさんNGNG
int a=0,b=a,c=b;
0552デフォルトの名無しさんNGNG
int a; が変数の宣言なのは分かったんですが
変数の定義はないんですか?
0553デフォルトの名無しさんNGNG
ぬるw
0554デフォルトの名無しさんNGNG
ぽw
0555デフォルトの名無しさんNGNG
>>552
ない
0556デフォルトの名無しさんNGNG
>>552
定義というのは宣言に内包されているもの。
しかし、
type name(type、・・・);
extern type name;
struct(class) name;
こういう形のものは定義と呼ばれることはない。
0557デフォルトの名無しさんNGNG
宣言とは、コンパイラに認識可能な名前を導入する記述。
宣言の後であればコンパイラはその名前の意味を認識することができる。

定義とは、宣言された名前に対応する本体の記述。
定義は、それが対応する名前を確実に知るために、必ず宣言を含んでいる。
0558デフォルトの名無しさんNGNG
下記のようなクラス階層の時、
class a
 ├class b
 │ └class c
 ├class d
 └class e
    └class f

class c から class d,e,f(階層上自分から見えないクラス) にアクセスしたい場合、
1.class c に class d,e,f のポインタを持たせてアクセスする
2.class c に class a のポインタを持たせてそれを経由する形でclass d,e,fにアクセスする
どちらが一般的なんでしょうか?

0559デフォルトの名無しさんNGNG
>>558
2では所有関係の逆参照になってしまうので、それを嫌って1のほうがマシに思える。
そういう階層ができてるというのなら、アクセスしないのがもっと一般的だとは思うけど。
0560デフォルトの名無しさんNGNG
コンストラクタで初期化に失敗した(ファイルを開くことができなかった、など)場合、
例外を投げるべきか、それとも取りあえず黙って受け入れて
bool Foo::valid() const { return handle_ != 0; }
のような関数で各自チェックしてくださいね〜とするのとどちらがよいのでしょう?
後者の場合、強制はできないので
int Foo::do_something() {
    if (!handle_)
        return -1; //とか、例外を投げるとか
    //何かする。
}
のように他の関数でもいちいちチェックしなければなりませんよね?
それとも、コンストラクタを全部private or protectedにして
Foo *Foo::create() {
    //いろいろチェック。ダメならすぐ0返す
    return new Foo(/* 全部OKなparameters */);
}
Foo *f = Foo::create(/* parameters */); //失敗したら0がかえってくる
f->do_something();
のようにするのとどっちが良いのでしょう?
0561デフォルトの名無しさんNGNG
>>560
例外が問題なく使えるなら投げるのが正解。

事情があって例外を投げることができない場合の最善手は難しいが、
「それとも〜」以下の手法は有効だと思う。
戻り値を std::auto_ptr<Foo> にすると少し嬉しいかも。
0562デフォルトの名無しさんNGNG
非常に分岐が多い場合、効率を上げるためにswitchの代わりに関数ポインタの
配列を使うのが有効ですが、これを通常の関数の代わりにinline関数で
行うことって可能でしょうか?

もしくはgotoのジャンプ先を、ifやswitchなどの分岐数の増加で効率が落ちる
制御命令を使わずに、動的に変更する方法ってないでしょうか?
0563デフォルトの名無しさんNGNG
>>562
動的じゃないけどmap使うとか
あるいはこんなのとか
http://www.s34.co.jp/cpptechdoc/article/selforg/index.html
0564デフォルトの名無しさんNGNG
質問です。
CreateProcessでコンソールプログラムを起動するときに、
リダイレクトの標準入力をしてする方法が分かりません。
標準出力に関するサンプルは多いのですが・・・
0565デフォルトの名無しさんNGNG
>>562
C++の話として進めると
インライン関数より関数オブジェクトの方がいいこといっぱいだYo。
ttp://www.s34.co.jp/cpptechdoc/article/selforg/index.html
0566デフォルトの名無しさんNGNG
あ、因みにvirtualにすると実行速度は遅いけどYo
0567デフォルトの名無しさんNGNG
>>564
だいたい標準出力と同じだよ。
ところどころ引数を気をつければ平気。
0568デフォルトの名無しさんNGNG
>>541 >>542
コピーコンストラクタはちょっと手間がかかりそうな気がしますが、
中括弧{}は便利ですね。switch文のcaseラベル内でも使えるし、
マクロでもまとめられるし何でも使えますね。
レスありがとうございました。
0569Addicted to C++ ◆nrBjarne.g NGNG
こんなのを作ってみたので評価をお願いします。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1060403548_118/fvector.hpp
0570デフォルトの名無しさんNGNG
>>569
手短に目的などを
0571Addicted to C++ ◆nrBjarne.g NGNG
>>570
ファイルをベクタみたいに使ってみたかったので、
同じインターフェイスにしてみました。
0572デフォルトの名無しさんNGNG
Win32ならメモリマップドファイルがあるんでそっちを使ったほうがいいと思うが。

目的が良くわからん。
たんなるオブジェクトの永続化か、メモリに常駐できないような巨大なデータを扱うのかで
より良い実装方法があると思うんで。

キャッシュの持ち方やファイルアクセスの仕方あたりをポリシー化してみたらどうかね?
0573デフォルトの名無しさんNGNG
今日こそはconstを有効に使うぞと思いつつ
なんだかんだで断念する日々が続いております。

とか言うとネタみたいですが、実際皆さんconstをきちんと使ってるんでしょうか。
周りはなんか適当な人ばかりです。C++です。
0574デフォルトの名無しさんNGNG
そりゃ使うだろ
適当な人との関わりはたった方がいいかもよ
0575デフォルトの名無しさんNGNG
>>574
だとすると>>573は自分とのかかわりを絶たなきゃならんわけだな。
0576デフォルトの名無しさんNGNG
>>573
その程度のプログラムだと、有効に使うことはできないよ。
0577デフォルトの名無しさんNGNG
>>575
自分は自分自身に対してはいつでも的確だよ。
0578573NGNG
レスサンクスです、曖昧な質問のせいで微妙に荒れちゃってすんません
最近はconstが無い言語も多いみたいなので、
こんなもんでもいいのかなと思ってました。

例えばメンバクラスを返すgetterがあった場合、
constと非constの両方用意した方が良いんでしょうか?
0579デフォルトの名無しさんNGNG
>>561
ありがとうございます。疑問が晴れました。
0580デフォルトの名無しさんNGNG
インライン関数はヘッダファイルのどこに書くのがよいですか?
・クラスの宣言内に。
・クラス宣言の外、その直後辺りに。
・どっちでもいい。
0581デフォルトの名無しさんNGNG
>>573 http://pc5.2ch.net/test/read.cgi/tech/1078193971/
0582デフォルトの名無しさんNGNG
>>580
・クラス定義内に定義
・クラス定義内で宣言、クラス定義後に定義
・クラス定義内で宣言、別ファイルに定義してクラス定義後に #include

下に行くほど面倒になるのと引き換えに、
メンテナンス性などでメリットがある。
0583デフォルトの名無しさんNGNG
>>563 >>565
現状がそもそも検索の必要もなく普通の関数ポインタの配列で
オーダー(1)で分岐先を判別できてまして(分岐条件の変数が
そのままインデックスになってる)、呼び出し回数の多い場所
だったので効率化のためにinline展開したかったので、折角教えて
もらったんですが自分のケースには使えそうにないです(´゚ω゚`)
asmでjmpの配列を作るのが現状にジャストフィットなんですが、
かなり面倒だったので似たようなことがCでもできないかな〜と
思ったんですが、関数ポインタの配列や関数オブジェクトの配列以外では
飛び先を配列化する方法は無さそうですね。。。
どうもでした。
0584デフォルトの名無しさんNGNG
>>583
gccの拡張機能ならいけそう。
ttp://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
0585デフォルトの名無しさんNGNG
>>584
ラベルのアドレスをポインタにできる。まさに今欲しい機能がそれっすよ。
gccだけなのかぁ。VCにも欲しい機能だった。
0586デフォルトの名無しさんNGNG
>>585
関数の辺値を配列のインデックスに合わせれば言いだけの話のような・・・・
0587デフォルトの名無しさんNGNG
関数の辺値?
0588564NGNG
だれかサンプルソース書いてください。お願いします。
0589デフォルトの名無しさんNGNG
>>588
STARTUPINFO dwFlags STARTF_USESTDHANDLES hStdInput
パーツを教えてやるよ。あとは自分で考えな。
0590564NGNG
>>589
ありがとうございます。がんばってみます。
0591564NGNG
// Set up the security attributes struct.
SECURITY_ATTRIBUTES sa;
sa.nLength= sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
//入力ファイルのハンドル
HANDLE hInputRead,hInputWriteTmp;
CreatePipe(&hInputRead,&hInputWriteTmp,&sa,0);
// 起動するウィンドウの状態
PROCESS_INFORMATION procInfo;
// 新しいプロセスの情報
STARTUPINFO startInfo;
GetStartupInfo( &startInfo);
startInfo.dwFlags = STARTF_USESTDHANDLES;
startInfo.hStdInput = hInputRead;
//起動
bool bret;
bret = CreateProcess(
"D:\\aaa.exe", // プロセスのパス(EXEのパス)
" < D:\\bbb.in",//"",// プロセスへのコマンドライン
NULL, // ハンドル継承(プロセスへのセキュリティ)
NULL, // ハンドル継承(スレッドへのセキュリティ)
TRUE, // ハンドル継承を行うか否か
CREATE_NEW_PROCESS_GROUP,// プロセスタイプおよび優先順位
NULL, // 環境ブロックのポインタ
NULL, // プロセスのパス
&startInfo, // 起動状態
&procInfo); // プロセスの情報
//開放
CloseHandle(hInputRead);
CloseHandle(procInfo.hProcess);
CloseHandle(procInfo.hThread);
0592564NGNG
>>591が現在のソースです。exeは立ち上がりますが、標準入力されていない状態です。
どこを変更すればよろしいでしょうか?
昨日の朝からやっているんですが、どうにもだめな状態です。
ご指導お願いします。
0593デフォルトの名無しさんNGNG
ウザ杉
0594デフォルトの名無しさんNGNG
>>592
まずはどこでコケてるか絞り込め。
戻り値を調べたり、場合によってはGetLastError()でエラー詳細を調べるとか。
最低限これくらいやれ。
0595564NGNG
>>594
こけはしません。
普通にexeが立ち上がるのですが、標準入力がされていない状態です。
どうするば標準入力されるかが分からない状態です。
0596デフォルトの名無しさんNGNG
アフォ杉
0597デフォルトの名無しさんNGNG
実際にどのようにコンパイルされているかを学ぼうと
今更アセンブラを勉強中です。

VC6の混合モードを使ってみたところ、シンボル付きで大変分かりやすく
これなら俺にも理解できるぜわーい、なんて思ってたのですが、
考えてみるとRelease時は最適化等で、全く別のコードになりますよね。

Release時のものを、シンボル付きで見る方法は無いのでしょうか。
思いっきり環境依存の質問ですがお願いします。
0598デフォルトの名無しさんNGNG
>>591
おいおい、" < D:\\bbb.in"ってリダイレクトしちゃっているじゃないか。
0599デフォルトの名無しさんNGNG
リダイレクトがシェルの仕事だということを理解して内容だな。

DuplcateHandleとかdupあたりを調べてから出直して来い
0600デフォルトの名無しさんNGNG
>>597
VC6なら「プロジェクトの設定」の
C/C++タブ:
 カテゴリ「一般」の「デバッグ情報」を「プログラムデータベースを使用」
リンクタブ:
 カテゴリ「一般」の「デバッグ情報を出力する」をチェック
で Debug ビルドと同じように混合モードで見ることができる。

それか、
C/C++タブ:
 カテゴリ「ファイルリスティング」の
 「リスティングファイルタイプ」を「マシン語コードとソースを含む」
で、Release フォルダに生成される .cod ファイルを読む。
0601597NGNG
>>600
ウヒョヒョヒョヒョヒョヒョヒョ
取り乱すぐらい上手くいきました。

これから色々試したり見たりするのが楽しみでならないです。
詳細なレスありがとうございました。
0602デフォルトの名無しさんNGNG
atexit()で指定した関数が呼ばれるのと、クラスのstaticメンバのデストラクタが呼ばれるのと
どちらが先でしょうか?
gcc3.2.4では前者の方が先のようですが何かできちんと定められています?
0603デフォルトの名無しさんNGNG
>>602
規格の3.6.3に記述がある。
ttp://www.kuzbass.ru/docs/isocpp/basic.html#basic.start.term
0604デフォルトの名無しさんNGNG
ありがとうございます。よく分かりました。
0605デフォルトの名無しさんNGNG
参考書でビットを左に回転するという問題で、int a = 0x8000やif(i & 0x8000)という表記があったのですが
0x8000は何進数の数字なのでしょうか。
Xが入っているところからして2進数でもないし、8進数でも10進数でも16進数でもなさそうですし
文字列だとしてもintは整数値の変数だから文字列は入れられないですし・・

コードです
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_36/code.txt




VC++6.0使用しています。
0606デフォルトの名無しさんNGNG
0xと頭にくれば、16進数です。
0607デフォルトの名無しさんNGNG
>>606
そういえばそんなのがあった気がしました、どうもです
0608デフォルトの名無しさんNGNG
天然かよ
0609デフォルトの名無しさんNGNG
だとしたらスゴイ
0610デフォルトの名無しさんNGNG
>>608-609
たんに初心者なだけ
0611デフォルトの名無しさんNGNG
c99に対応したコンパイラを教えてください
0612デフォルトの名無しさんNGNG
>>611
VC++、BCC、GCC、いろいろ
0613デフォルトの名無しさんNGNG
質問です。お願いします。
ファイル検索できるランチャ作ろうと思うんですけど何で作るか、何が作りやすいか教えてください。
一応候補はVBNET−c++−c−JAVA−です。
0614デフォルトの名無しさんNGNG
>>613
HSPがいいが、その中ならVB.NET
0615デフォルトの名無しさんNGNG
>>613
その中で>>613が良く知ってるもので。
0616564NGNG
リダイレクト自己解決しました。

// 起動するウィンドウの状態
PROCESS_INFORMATION procInfo;
// 新しいプロセスの情報
STARTUPINFO startInfo;
GetStartupInfo( &startInfo);
//起動
bool bret;
bret = CreateProcess(
         "C:\\WINDOWS\\system32\\cmd.exe", // プロセスのパス(EXEのパス)
  "/C D:\\aaa.exe < D:\\input.txt >D:\\out.log",//"",// プロセスへのコマンドライン
     NULL, // ハンドル継承(プロセスへのセキュリティ)
     NULL, // ハンドル継承(スレッドへのセキュリティ)
     FALSE, // ハンドル継承を行うか否か
     CREATE_NEW_PROCESS_GROUP,// プロセスタイプおよび優先順位
     NULL, // 環境ブロックのポインタ
     NULL, // プロセスのパス
     &startInfo, // 起動状態
     &procInfo); // プロセスの情報

//開放
CloseHandle(procInfo.hProcess);
CloseHandle(procInfo.hThread);

最初と方向性が変わってしまいましたが、
なんとか出来ました。
皆さんありがとうございます。
0617デフォルトの名無しさんNGNG
vbはやめとけ
どうしてもradがいいならc++builderつかえ

0618デフォルトの名無しさんNGNG
system("D:\\aaa.exe < D:\\input.txt >D:\\out.log");
0619デフォルトの名無しさん NGNG
cコンパイラの設定を行ってるのですが全て正しく行ったのに
【'D:\' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。】
と表示されてしまします。どなたか原因がわかる方いましたらお願いします。
0620デフォルトの名無しさんNGNG
>>619
全て正しく行ってないから。
0621デフォルトの名無しさんNGNG
>>619
D:\
というコマンドは存在しないから。
0622デフォルトの名無しさんNGNG
>>619
D:かcd /d D:\のどちらか。
0623デフォルトの名無しさんNGNG
D:\ではなくてD:\>bcc32です。
パスに【c:\Borland\Bcc55\bin】追加済み。
システム環境変数『Path』設定済み(変数+;c:\Borland\Bcc55\bin)
bcc32.cfgファイル、ilink32.cfgファイル作成済み。
これでエラーです。
どなたか原因解明お願い致します。
0624デフォルトの名無しさんNGNG
>>623
bcc32
とだけ入力したあとでDOSの勉強しろ。
0625デフォルトの名無しさんNGNG
>>624
できました!
どうもお手数かけましてすいません。。
ありがとうございます。
0626デフォルトの名無しさんNGNG
コマンド プロンプトでC:\の後にDocuments and Settings\mikami>
と表示されてしまうんですが消せますか?
また消し方わかるかたいたらお願いします。
0627shigeNGNG
prompt
0628デフォルトの名無しさんNGNG
>>626
Windows板かPC初心者板へどうぞ。

//help prompt
0629デフォルトの名無しさんNGNG
class A {
public:
    A(int id): id_(id) {}
    A(int id) { id_ = id; }//ダメ
    ~A() {};
    void func() { id_++; } //ダメ
private:
    const int id_; //<--
};

メンバ変数のconstというのはコンストラクタで初期化したあとは
一切変更できない、という理解で良いですか?
自分の読んでいる本ではメンバ変数のconstについて何も触れていなかったので。
0630デフォルトの名無しさんNGNG
>>629
そのとおり。
しかし、そんな本は読むだけ無駄。窓から捨てろ。
いや、これはマジな話。
入門書は定評のあるものを読んだ方が絶対に良いよ。
0631デフォルトの名無しさんNGNG
メンバをconstにするとなると、コンストラクタの充実が必要だな。
さもなければ、そもそも何故staticにしないのかと突っ込まれそうだ。
0632デフォルトの名無しさんNGNG
質問です。VC++で構築したプログラム(ただし、一般的な
関数しか使わない)をWinで動かした計算結果と、*.cppおよび*.h
だけをUNIXに持ってきてgccでコンパイルして作った実行ファイル
をUNIXで動かした計算結果が全く異なるということが起こった
のですが、考えられる原因は何かありますでしょうか?
0633デフォルトの名無しさんNGNG
その聞き方でわかるやつは神
0634デフォルトの名無しさんNGNG
>>632
どんな計算をしてるのかも分からないんじゃ
特別何といいようもないような
0635デフォルトの名無しさんNGNG
実は浮動小数の書式化方法が違うだけで計算結果はまったく同じだったりしてな
0636デフォルトの名無しさんNGNG
”一般的な関数”と”標準ライブラリ内の関数”じゃ大違いだぞなもし。
0637629NGNG
>>630-631
ありがとうございます。読んでいるのはEssential C++です。
メンバ関数のconstや、mutableメンバ変数については解説されていたのですが。
「書いていない」というのは自分の勘違いかもしれないです。
使い道としては、何らかのID番号とか、生まれたときに一度決まったら
そのオブジェクトが無くなるまで終生変わらない属性、人間で言えば性別とか、に付けるべき、ということですね?

>メンバをconstにするとなると、コンストラクタの充実が必要だな。
>さもなければ、そもそも何故staticにしないのかと突っ込まれそうだ。
すみません。この部分がよく分からないのです。
0638デフォルトの名無しさんNGNG
>>637
あー、Esseintial C++なら捨てる必要は無いわw
でも、こら、const変数の扱いなんか、読者は当然分かってるって
前提の本だからなぁ。
値は張るけど「プログラミング言語C++」は読んどいた方がいいよ。

constメンバ変数の役割についてはその理解でよいです。
static云々については俺も分からんw
0639デフォルトの名無しさんNGNG
>>637
俺は>>631ではないけれども、おそらくstaticについて>>631の意図する
ところは、「例えばコンストラクタのイニシャライザで定数を代入して
いたりすると、そのようにしたい時にはstatic constメンバにするのが
普通だろうという突っ込みを受けるだろう」ということだと思う。
>>629についてはconstのまま(static不要)でいいだろうと思うが。
0640デフォルトの名無しさんNGNG
>>638-639
ありがとうございます。捨てる必要が無くてホッとしました。
プログラミング言語C++は店頭で見かけたものの、1000ページ超という厚さに圧されスルーしていました。
今の本を読み終えたら、さっそく通読す・・・るのは大変そうだけど辞書代わりに使えそうですね。

>「例えばコンストラクタのイニシャライザで定数を代入して
>いたりすると、そのようにしたい時にはstatic constメンバにするのが
>普通だろうという突っ込みを受けるだろう」
#include <iostream>
class EssentialCplusplus {
public:
    EssentialCplusplus() :price_(3600) {}
    int price() const { return price_; }
private:
    const int price_; //再販制度?
};
//のように「コンストラクタのイニシャライザで定数を代入していたりする」よりも

class yaEssentialCplusplus {
public:
    int price() const { return PRICE; }
private:
    static const int PRICE = 3600;
};
//ya...の方がオブジェクト毎に無駄なメンバを持たないし、普通の書き方だ、という理解で良いですね?
//あまり良い例が思い浮かばなかった・・・。
int main(int argc, char *argv[])
{
    yaEssentialCplusplus book; //yaEssentialCplusplus book(); と書いて今までずっと悩んでいた。
    std::cout << "昨日の本代は、" << book.price() << std::endl;
    return 0;
}
0641デフォルトの名無しさんNGNG
その例だと、オプティマイズによってメンバの実態は消えてなくなるけどね。
寧ろ、3600円が普遍的ではないので私ならstaticにはしないだろう。
0642 ◆CEGOPxxn8s NGNG
>>632
それは乱数生成関数の値が違うから。
0643デフォルトの名無しさんNGNG
C++は糞
つかてるやつも糞Ruby!!!!!!
Ruby >>>>>>>>>>>>>>>>>C++
Ruby!!!!!!!!!!!
Ruby >>>>>>>>>>>>>>>>>>>> Ruby!!!!!!!!!
Ruby!””””””””””””””””””###########3
0644デフォルトの名無しさんNGNG
Rubyは最強言語!!!!
C++なんて論外^^;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Ruby >>>>>>>>>>>>>>>>>>>> C++++++++
0645デフォルトの名無しさんNGNG
実行速度でもRuby .???????????>>>>>>>>>>>>>>>>>C++++++++
0646デフォルトの名無しさんNGNG
Javamなんてうんjこいp!
Perlはもうメンテされてmせん。
Ruby誇らしい出宇sね。
0647デフォルトの名無しさんNGNG
Rubyは超言語!
0648デフォルトの名無しさんNGNG
>>642
エスパー降臨!
0649デフォルトの名無しさんNGNG
int i=5;
int a[i]

はエラーがでるそうなのですが
配列のサイズに変数を指定する必要があるとき、エラーがでないように
する他の方法ってないのでしょうか?
変化するサイズの変化量を見越して多めにサイズとるしか方法はないのでしょうか?

iに5が代入されてるから定数と変わらないような気がするんですけど…
なんでなんだろう…
0650デフォルトの名無しさんNGNG
>>649
C99かmalloc
0651デフォルトの名無しさんNGNG
vector使う
0652デフォルトの名無しさんNGNG
enum{ i=5 };
0653デフォルトの名無しさんNGNG
>>649
> はエラーがでるそうなのですが
せめて自分でコンパイルして確認してから質問に来てください。
0654デフォルトの名無しさんNGNG
#include <vector>
してから
int i=5;
std::vector<int> a(i);
0655デフォルトの名無しさんNGNG
C++のメソッド内で起きたエラーの扱いに関してですが、
実行環境に依存するエラー(ex:ファイルが存在しない)を通知する場合

・メソッドの戻り値としてエラーが発生した事を返す
・std::runtime_errorを投げる
・std::exceptionから自前の派生クラスを定義してそれを投げる

などが考えられますが、どれを使うべきでしょうか?
0656デフォルトの名無しさんNGNG
>>649
int i = 5;
int *a = new int[i];
delete [] a;
0657デフォルトの名無しさんNGNG
>>655
返り値で通知するか例外投げるかは設計次第だが、そこでなんで
・std::runtime_error派生の独自例外クラス
という選択肢がない?
0658デフォルトの名無しさんNGNG
ファイルが見つからないといった想定できるエラーケースでは戻り値で返すのが
いいんでないの?

ただ、コマンドパターンとかプロクシパターンとかの複雑な処理の中で、
中から呼び出し元に例外(エラー)を伝えるんだったら例外のほうがすっきり
する場合があるよね。

エラーするかしないかの二値しかない場合はエラーコードで。
エラーにバリエーションがあるけどコードで済む場合
(エラーの原因が渡したパラメータ*のみ*に依存する場合なんかね)もエラーコードで。
渡されたパラメータに依存しない(メモリ不足で継続不能とか)は例外で。
呼び出し元にエラーの詳細情報を送り付けたいときも例外で。
0659デフォルトの名無しさんNGNG
原理主義すぎるかもしれないけど、エラーを返すのが目的の関数でもない限り、
戻り値にエラーコード入れるのは違うと思う。

C 系言語は関数のシグネチャで戻り値に名前をつかられるようになってないので、
戻り値は出来るだけ関数から自然に想像できる値だけにして、
それ以外は例外か、最悪ポインタ渡しにしたほうがいいと思う。
0660デフォルトの名無しさんNGNG
errnoってのもあるし。
0661デフォルトの名無しさんNGNG
C++ の STL は積極的に使うべきなの?
0662デフォルトの名無しさんNGNG
使えるときはね
0663661NGNG
>>662
サンクス。
通常の配列で処理可能のケースでも vector とか使うほうがエエの?
0664デフォルトの名無しさんNGNG
>>650
調べてみます
>>651
調べてみます
>>652
iはいろいろな数字に変化するようにしたいので…
>>653
実際には構造体の配列変数でやってる時に”C2057定数式が必要です”というエラーがでまして
F1で調べて見ると簡単な例として>>649みたいな例が載ってたのでその例を元に質問をしてみました

実際には

struct a b[i]

みたいに使っててエラーがでました

>>654
調べてみます
>>656
調べてみます

レス下さった方々ありがとうございました
まだ初心者なので
皆さんのレスを参考に調べてわからないとこがありましたらまた質問するかもしれないので
その時もよろしくお願いします
0665デフォルトの名無しさんNGNG
>>663
他の箇所でvectorなどを使っている場合は、一貫性を示すために使う場合もある。
一貫性が重要。
0666デフォルトの名無しさんNGNG
vectorは遅い。
0667デフォルトの名無しさんNGNG
窓の杜でいいじゃん。
0668デフォルトの名無しさんNGNG
仕様の段階で固定個数であることが自明なら配列、
それが必要になった段階で個数が確定している状況ならnew、
そうでないならvectorだなぁ。
0669デフォルトの名無しさんNGNG
標準ライブラリには auto_array がついてないので new 配列は使用禁止。
0670661NGNG
>>665-669
ベリーサンクス!
vector の最大の利点は動的にサイズ拡張できる、ってことですかね?
VisualBasic の ReDim みたいな。

まだ勉強中なので >669 の言ってる意味がわかりません。スマソ
0671デフォルトの名無しさんNGNG
vectorならdeleteする必要がない
newと違ってやりっぱなしでいい。
0672デフォルトの名無しさんNGNG
boost::scoped_array
0673デフォルトの名無しさんNGNG
それ標準じゃないしい
0674655NGNG
やはりいろいろな思想があるようですね

>>657
ソレダ⊂(。Д。⊂⌒' つ
何で気づかなかったんだ
0675デフォルトの名無しさんNGNG
boost::array
0676デフォルトの名無しさんNGNG
また、「vectorは遅い」厨が湧いてきたか・・・。
知ったかぶりして恥ずかしくないのかねぇ。
0677デフォルトの名無しさんNGNG
vectorはわりと速いよ
それは前に実証済みだったと思うけれど…
0678デフォルトの名無しさんNGNG
正しい使い方しないと遅いけどな。
0679デフォルトの名無しさんNGNG
vectorは生配列よりは要素アクセスも遅いよ。まあ常識だけど。
生のポインタアクセスと同じ速さにしたければ
T *ptr = &vec[0];
みたいにポインタを取ってからポインタ演算して使う。
これも常識だけど。
0680デフォルトの名無しさんNGNG
脳内常識をムキになって披露しなくていいのに。
なにか嫌なことでもあったのかな。
0681デフォルトの名無しさんNGNG
http://216.239.57.104/search?q=cache:XuZFHx_OtWoJ:www.bq--3ayiomcfao4tbgzqq4.to/www/nazo/prog/vectorspeed/+vector%E3%80%80%E9%80%9F%E5%BA%A6&hl=ja&lr=lang_ja&inlang=ja
0682デフォルトの名無しさんNGNG
>>681
やっぱそうだよな。常識だよな。
0683デフォルトの名無しさんNGNG
コンパイラや実装にも依ると思うが
[]使ったアクセススピードは大抵の場合、全く同じかほぼ同じぐらいのレベルだろ

と思って書き込む前にリロードしたら>>681 …?
  測定:生配列 ポインタ 使用した時間 641
  測定:すべてをポインタにした vector 使用した時間 1903
なんでこんなに違うんだ?
明らかにおかしくないか
0684デフォルトの名無しさんNGNG
本当かよ?って思ったから実際やってみたぞ。
VC7.1で、/O2付きSTLportだ。

>array:80.306[ms]
>vector:80.0303[ms]
だったぞ。全然かわらんではないか。
0685デフォルトの名無しさんNGNG
まあ速度が重要ならこうアクセスするのはvectorの基本だよ。
int *p = &vec[0];
int s = vec.size();
for(int i = 0; i < s ; ++i)
{
p[i] = x;
}
0686デフォルトの名無しさんNGNG
ポインタ値を直接増減させるよりp[i]のように
ポインタ値にインデックスを加算する方が早いらしいね。
0687683NGNG
>>684の見て安心した

  測定:生配列 ポインタ 使用した時間 641
  測定:すべてをポインタにした vector 使用した時間 1903
の例とか見ても>>681のサイトは明らかにおかしいし、
大抵のコンパイラならvectorの実装を見てもそんなに遅くなる分けないし
0688デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>>Vector
0689デフォルトの名無しさんNGNG
Vector >>>>>>>>>>>>>>> 窓の杜
0690デフォルトの名無しさんNGNG
>>685
vectorに関する勘違いの基本だな。
0691デフォルトの名無しさんNGNG
大抵の実装を見ても、vectorが生ポインタより明らかに遅くなる要素は見あたらないからね。
配列と比較しての、生成/破棄のコストを除いて。

あえて違いを挙げるとすれば、
classのメンバは必ずメモリ上に置かれるので
レジスタに割り付けられる可能性の高い生ポインタより
ベンチ上は若干遅くなる可能性はあるかもしれないけど。
0692デフォルトの名無しさんNGNG
struct a b[i];
をvectorを使って
std::vector<struct a> b(i);
と書き換えたのですが
0x7c941230 でハンドルされていない例外が発生しました : ユーザー設定のブレークポイント。
というエラーが実行中に出て
xmemory internal header (from <memory>)
のoperator delete(_Ptr);という行が表示されました

どうすればうまくいくのでしょうか?

0693デフォルトの名無しさんNGNG
>>692
うまく代入出来てないだけでは。
例えば、struct aのコビーコンストラクタとoperator=がうまく動いてないとか
0694デフォルトの名無しさんNGNG
(お持ちの方がいればAccelerated C++、206ページの話です)
初歩的なことですがC++で質問です(現在、C++言語の基礎を学習中)。
vectorを大まかに再現したクラスを作成中です。
そのデストラクタを作っているのですが、それぞれのデータ要素の
破棄をした後にメモリを解放するのはなぜでしょうか?
というより、メモリを解放してもデータ要素は残るものなのでしょうか?
ちなみに、<memory>ヘッダにあるallocatorクラスの、destroyとdeallocateを
つかっています。
0695デフォルトの名無しさんNGNG
>>694
構築されたデータは適切に解体されなければならない。
たとえばそのvectorに次のようなクラスを入れることを考える。
struct test
{
    test() :p(new int){}
    ~test(){delete p;}
private:
    int *p;
};
testのインスタンスが構築されるだけで解体されないとメモリリークが起こる。
一般に、クラスは正しく解体されることを前提として設計されているから、
コンテナを書くときは要素を破棄しないといけない。

>というより、メモリを解放してもデータ要素は残るものなのでしょうか?
std::allocator<test> alloc;
test *g = alloc.allocate();
alloc.construct(p);
alloc.deallocate(p);
*gのデストラクタが呼ばれないから、このコードはメモリリークを起こす。
0696695NGNG
訂正。
>alloc.construct(p);
>alloc.deallocate(p);
alloc.construct(g);
alloc.deallocate(g);
0697デフォルトの名無しさんNGNG
>>695
ありがとうございました。
クラスを入れる場合、破棄しないとそのデストラクタがさぼってしまう
てことですよね。ということは逆に考えると、
(再利用性や現実味は置いといて)組み込み型のみを入れ、初期化を
ちゃんとするなら破棄はあってもなくても問題は起こらないのでしょうか?
連続質問すいません。コンストラクタむずい・・・。
0698デフォルトの名無しさんNGNG
>>697
その通り。
#include <cstdlib>
void f()
{
int *p = std::malloc(100 * sizeof(int));
/* ここでpをつかう */
std::free(p);
}
C言語ではこんな感じでよく使われる。(malloc/freeはallocator::allocate/deallocateに相当)
0699デフォルトの名無しさんNGNG
>>697
たぶん問題ないんじゃない?
C++でもmalloc/freeは使えるんだから。
0700692NGNG
>>693
レスありがとうございます
要素数がiしかないのにi+1個の要素を入れようとしてたためにエラーが起こったようです
おかげさまで無事解決しました
0701デフォルトの名無しさんNGNG
>>697
オブジェクトの寿命と、オブジェクトを配置するメモリの寿命は分割し得るということ。
0702デフォルトの名無しさんNGNG
>>695
>>699
>>701
当たっててよかった・・。理解できてるようです。
本当にありがとうございました。もう、まっすぐに感謝です。
0703デフォルトの名無しさんNGNG
struct a {
float x1,y1,x2,y2;
};

std::vector<struct a> b(20);
b[1].x1=10;

としてもb[1].x1に10が代入されてないのですけど
なぜでしょうか?

0704デフォルトの名無しさんNGNG
>>703
> b[1].x1に10が代入されてない
何を見てそう思ったの?
0705デフォルトの名無しさんNGNG
>>704
         HDC hdc;
TCHAR szBuf[32];
hdc = GetDC(hWnd);
wsprintf(szBuf, "%d", b[1].x1);
TextOut(hdc, 1, 1, szBuf, lstrlen(szBuf));
ReleaseDC(hWnd , hdc);

で画面にb[1].x1の内容を表示させたら0が表示されました
0706デフォルトの名無しさんNGNG
>>705
代入と表示の間のコードはどうした?
なるべくソースを貼りたくない気持ちはわからんでもないが、
それじゃぁ何も知らない他人に教えてもらうことは期待できないぞ。
0707デフォルトの名無しさんNGNG
>>705
> wsprintf(szBuf, "%d", b[1].x1);
floatじゃなかったのか?
0708デフォルトの名無しさんNGNG
>>706
代入と表示の間のコードはこれだけなんですが…
b[1].x1=10;以降は配列bはいじってないです
0709デフォルトの名無しさんNGNG
>>706
>>707
struct a {
float x1,y1,x2,y2;
};
を
struct a {
int x1,y1,x2,y2;
};
にかえたらうまいこといきました
レスありがとうございました

それと、初歩的な質問なんですけど
なぜfloatだと0が表示されるんですか?
0710デフォルトの名無しさんNGNG
"%d"はint型を処理する。float, doubleを渡したときは何が起こるかわからない。
"%f"はfloat, double型を処理する。char, short, int, longを渡したときは何が起こるかわからない。
0711デフォルトの名無しさんNGNG
>>710
丁寧にご説明ありがとうございます

floatを表示させたいので早速
struct a {
float x1,y1,x2,y2;
};
wsprintf(szBuf, "%d", b[1].x1);
を
struct a {
float x1,y1,x2,y2;
};
wsprintf(szBuf, "%f", b[1].x1);
に変更したところ
画面には”f”という文字が表示されてしまいました

なぜでしょうか?
0712デフォルトの名無しさんNGNG
wsprintfが対応してないから
0713デフォルトの名無しさんNGNG
sprintf使っとけ
0714デフォルトの名無しさんNGNG
>>712
>>713
即レスありがとうございます

早速
wsprintf(szBuf, "%d", b[1].x1);
を
sprintf(szBuf, "%d", b[1].x1);
に変更したところちゃんと表示されました

レスのために貴重な御時間をさいてくださってありがとうございました
0715デフォルトの名無しさんNGNG
>レスのために貴重な御時間をさいてくださってありがとうございました
こういうことを書かれても、ちょっと調べれば判ることを質問された後だけに
誠意の欠片も感じられない気がする恭子の頃。
0716デフォルトの名無しさんNGNG
std::stringstream変数をクリアーしたいのですがどうすればいいのでせう?
0717デフォルトの名無しさんNGNG
int h;
float x;
h=10;
x=h*10.0;
とすると
warning C4244: '=' : 'double' から 'float' に変換しました。データが失われているかもしれません。
という警告が出ます
x=h*float(10.0);
とすると警告がでなくなるのですが
10.0がdoubleだから警告がでるのでしょうか?
x=10.0;としても警告でないから10.0はdoubleじゃないような気もするし…

なぜ警告が出るのでしょうか?
0718デフォルトの名無しさんNGNG
>>716
std::stringstream foo;
foo.str("");
0719デフォルトの名無しさんNGNG
>>717
10.0 は doube。
10.0f が float。
0720デフォルトの名無しさんNGNG
>>718
おーそんなふうに使うのか
レスありがとうございますです
0721デフォルトの名無しさんNGNG
演算途中に倍精度型が含まれてると、その部分だけ式の両辺が倍精度型に
格上げされてから演算が行われる。

結果の格納先が単精度型だと、倍精度が単精度型に変換されるんで、
いちいち変換処理が入って無駄が多い。

どうしても単精度がよければ式に倍精度型が含まれないようにいちいち
気を配ってやらなきゃいけない。

データがでかすぎてメモリが足りなくて、かつこれ以上アルゴリズムの改善も
出来ないという場合でなければ、倍精度型を常用したほうがいいよ。
0722デフォルトの名無しさんNGNG
>>719
なるほどx=h*10.0;をx=h*10.0f;とするとエラーが出ませんね
x=10.0;は右辺がdoubleなのになぜ警告が出ないんでしょうか?

>>721
どうしても単精度をつかわないといけないんです
>どうしても単精度がよければ式に倍精度型が含まれないようにいちいち
>気を配ってやらなきゃいけない。
x=h*10.0f;このようにfをつけて10.0を単精度に変換すればいいということでしょうか?

すごく勉強になりました
ご返答ありがとうございました


0723デフォルトの名無しさんNGNG
質問です。
自作のプログラムですが、外部ファイルのデータを10MBほど読み込んで
そのデータに基づいてプログラムが動きます。
この外部ファイルデータをプログラムに埋め込みたいのですが
うまくいきませんでした。データを16進ダンプして0x00〜0xFFに置き換え、
以下のようにunsigned char配列に格納しようとしました。
unsigned char array[] = {
#include "data.h"
};
しかし、配列サイズが大きすぎて最大メモリ割り当てを超えてしまいました。
VC++.NETです。/Zmオプションも使いましたが変化ありませんでした。
こういう巨大データをプログラムに埋め込む場合、どうすりゃいいのでしょうか。
0724デフォルトの名無しさんNGNG
staticにしる
0725723NGNG
>>724
staticですか。試してみます。
しかし実は、この配列をプログラム内ではさらに構造体配列に
マップしようと思っています。そういうのはアリなんでしょうか。
sturct abc {
float xyz[3];
float col[4];
} *ddd;
のような構造体があったとき、
ddd = (struct abc *)array;
のようなことをしたいのです。本当はクラスをマップしたいのですが、
メンバ関数や継承データのことを考えると難しそうなので構造体にしました。
0726デフォルトの名無しさんNGNG
>>725
試してから言え
0727デフォルトの名無しさんNGNG
winapp error LNK2019: 未解決の外部シンボル _main が関数 _mainCRTStartup で参照されました。
winapp fatal error LNK1120: 外部参照 1 が未解決です。

このようなエラーが出てしまいます。初心者なのでどうやって解決していいか分かりません。
教えてください。
0728デフォルトの名無しさんNGNG
>>727
"_main が関数 _mainCRTStartup で参照されました。"の文をGoogleで検索してみな・・・
0729デフォルトの名無しさんNGNG
有難うございます。そこで、win アプリケーションでしたところ、ビルドは
できたのですがデバッグで、このようにでました。
'WinApp.exe': 'C:\WINNT\system32\NTDLL.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'WinApp.exe': 'C:\WINNT\system32\KERNEL32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'WinApp.exe': 'C:\WINNT\system32\USER32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'WinApp.exe': 'C:\WINNT\system32\GDI32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'WinApp.exe': 'C:\WINNT\system32\imm32.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'WinApp.exe': 'C:\WINNT\system32\ADVAPI32.DLL' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
'WinApp.exe': 'C:\WINNT\system32\rpcrt4.dll' を読み込みました。必要な DBG ファイルが見つからないか、開けません。
プログラム '[1760] WinApp.exe: ネイティブ' はコード 87 (0x57) で終了しました。

これはなんですか?
0730デフォルトの名無しさんNGNG
>>729
"必要な DBG ファイルが見つからないか、開けません。"をGoogleで
っていいかげんにしろコラ
0731デフォルトの名無しさんNGNG
>>727
http://pc5.2ch.net/test/read.cgi/tech/1093672937/697
0732デフォルトの名無しさんNGNG
クラスをvecter使って管理しようと思うのですが
やっぱりポインタを使ってvecterで管理するのが一般的ですよね?
でもポインタで管理するとリークの心配があるかなぁ?
ポインタで管理と実態で管理、どっちがC++ではいいのでしょうか?

ポインタを使わないでやった事ある人いませんか?


0733デフォルトの名無しさんNGNG
>>732
そのクラスがコピー不可orコピーにかかるコスト大ならポインタでやればよろし。
リークしたくないんならboost::shared_ptr使え。
0734デフォルトの名無しさんNGNG
ポインタ面倒ならスマートポインタでも使え
0735デフォルトの名無しさんNGNG
>>733-734
どうもです。
作りとしてはこれでいいのですよね?↓
#include <vector> // STL std::vector<>
class Data
{
public :
int a;
int b;
} ;

std::vector< Data > DataVecter ; // Dataを管理してあとで使いたい

int main()
{
{
Data X;
Data Y;
Data Z;
X.a = 100;
X.b = 100;
Y.a = 200;
Y.b = 200;
Z.a = 300;
Z.b = 300;
DataVecter.push_back(X);   //ここで入れてみる
DataVecter.push_back(Y);
DataVecter.push_back(Z);
}
int a = DataVecter[2].a;           //この辺で使ってみる
return 0 ;
}
0736デフォルトの名無しさんNGNG
C++ as better Cかな?
0737デフォルトの名無しさんNGNG
>>735
その目的なら、適切なコンストラクタを用意して、
DataVector.push_back(Data(100, 100));
DataVector.push_back(Data(200, 200));
DataVector.push_back(Data(300, 300));
でいいね。
0738デフォルトの名無しさんNGNG
>>735
やってみて言ってるのか?
0739デフォルトの名無しさんNGNG
つか、それなら

Data X;
X.a = 100;
X.b = 100;
DataVecter.push_back(X);
X.a = 200;
X.b = 200;
DataVecter.push_back(X);
X.a = 300;
X.b = 300;
DataVecter.push_back(X);

で良いんでは?
0740デフォルトの名無しさんNGNG
>>737でいいじゃん
簡単に書けてRVOも効きそうだし
0741デフォルトの名無しさんNGNG
>>737
あ、すんません
あくまで例でして
データが入ったクラスをvecterで管理がしたいのです。
0742デフォルトの名無しさんNGNG
あ、そんでデータクラスの中身は
数値が少々と文字列
もしかしたらクラスも入るかもです。
0743デフォルトの名無しさんNGNG
俺ならATLでCAutoPtrArray使っちゃう。
0744デフォルトの名無しさんNGNG
Cで書かれたライブラリで関数ポインタを受け取るものに
インスタンスのメンバ関数を(上手く言えない・・・)呼び出させたいです。
例えば
#include <iostream>
//(例)この部分は自分でいじれない----------
typedef int (*pfunc)(void);
static void
hoge(pfunc p)
{
    std::cout << p() << std::endl;
}
//------------------------ここまで

class A {
public:
    A(int i) :i_(i) {}
    int foo(void) { return i_; }
private:
    int i_;
};

int
main()
{
    A a(100);
    hoge(?????); //aのメンバ関数foo()を呼び出させたい
    //Perlだと、aがリファレンスとして hoge( sub { a->foo() } );のような感じか・・・
}
0745デフォルトの名無しさんNGNG
>>744
出来ません。
普通の関数ポインタと、メンバ関数へのポインタは型が違います。
0746デフォルトの名無しさんNGNG
extern "C" と this渡しとメソッドのアドレス渡しでなんとかしれ
0747デフォルトの名無しさんNGNG
>>744
A *p (NULL);
int hage () {return p ? p->foo () : -1;}
int main() {
A a(100);
p = &a;
hoge(hage);
return 0;
}
0748デフォルトの名無しさんNGNG
質問です

継承したクラスの使い方がわかんなくなってきました
下のように、純粋仮想ベースクラスと、それを継承したものがあったとします

class CBasetest{
virtual int test() = 0;
};
class Ctest : public CBasetest{
int test(){return 0;}
};

で、気づいたらこんなソース書いてました

CBasetest *pBase = new Ctest;//1
delete pBase;//2

2の時にCBasetestのまま開放するのが正しいかどうかわかんなくなってしまって・・。
delete (CBasetest *)pBase;//3
みたいに、キャストしないといけないんですかね。正しい方法教えてください
0749デフォルトの名無しさんNGNG
さすがC++スレ
糞みたいな質問と低レベルな会話ぷぷぷ
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C++++++++++
0750デフォルトの名無しさんNGNG
>748
Ctest *pTest = new Ctest;
delete pTest;
という選択肢はないのかよ
0751デフォルトの名無しさんNGNG
CBasetestに空の仮想デストラクタをつけとけば今後何かとOK
0752デフォルトの名無しさんNGNG
>>748
class CBasetest{
public:
virtual int test() = 0;
virtual ~CBasetest () {}
};
class Ctest : public CBasetest{
public:
int test(){return 0;}
};
ノイローゼ?
0753デフォルトの名無しさんNGNG
class A {
public:
    class B {
    };
};
のように(private,protectedでなく)publicにクラスをネストさせる意味とは何でしょうか?
0754デフォルトの名無しさんNGNG
>>753
入れ子クラスにすることで、その入れ子クラスが単体では無意味であることをユーザに暗示できる。
言い換えると依存関係をユーザに暗示できる。
VisualStudioなどのIDEでクラスビューのトップツリーにクラスが乱立するのを抑止できる。
0755デフォルトの名無しさんNGNG
>>753
class A固有のインタフェースないしプロキシであるところのclass B
0756デフォルトの名無しさんNGNG
>>748
class CBasetest {
virtual ~CBasetest()=0;
};
これで delete pBaseで各派生クラスのデストラクタが呼び出される。
基底クラスにはvirtualなデストラクタを用意するというのは基本中の基本。
しっかり覚えときや。
0757デフォルトの名無しさんNGNG
>756
>748は
CBasetest *pBase = new Ctest;//1
delete pBase;//2
ってやってるからデストラクタを純粋仮想関数にするのはまずくないか?
class CBasetest {
virtual ~CBasetest(){ /* 処理 */  };
};

0758デフォルトの名無しさんNGNG
>>757
あっ、ホントだよ。デストラクタを純粋仮想にしてどうすんだよ。
空のデストラクタ用意しとかなまずいわな。
virtual ~CBasetest() { //中身なし };

酔っ払ってるとダメだなw
0759デフォルトの名無しさんNGNG
↑さらにダメだなw
× { //中身なし };
○ { /*中身なし*/ };

もうねます。じゃねー。
0760デフォルトの名無しさんNGNG
class CGlobal
{
public:
static int globalData;
};
グローバル変数代わりに使いたいんですが
ネームスペース使うだけで、外部参照を行うことってできないんですか?
CGlobal::globalData=10;みたいに他のファイルで操作したい。
エラーが起こったんですが、別の部分で間違ってる可能性もあるので。
0761デフォルトの名無しさんNGNG
>>760
エラーが起こったならエラーメッセージを貼れ。
一番的確な情報だ。
0762デフォルトの名無しさんNGNG
外部参照エラー出ました。しかもそのglobalDataに当たるモノ
が。貼る事はできません。違うPCでネットしてるので。すいません。
externすればいいのかな。
0763デフォルトの名無しさんNGNG
>>762
class 定義内での static データメンバに初期化子が無ければ、それは宣言だけになる。
初期化子をつけて同時に定義とするか、クラス定義外に static データメンバの定義を追加しる。
0764763NGNG
ごめん。
初期化子つけて同時に定義とできるのは、型が const 付きの整数か enum の時だけ。
>>760 は整数だけど const 付いてないから、初期化子つけて定義にはできない。

ってことで、
クラス定義外に static データメンバの定義を追加しる。
0765デフォルトの名無しさんNGNG
その通りでした。。。
初期化忘れてました。
>>class定義内で...
でも、class定義内で初期化子つけて宣言ってできませんよね。?
初期化子つけないと定義されないというのは知らなかったです。
つけなきゃいけないってのは分かってた(つもり)でしたが...
ありがとうございました。
これで、extern無しでグローバルスコープだ。わぁい。
0766762NGNG
>>764
入れ違いでしたね。レスありがとう
0767デフォルトの名無しさんNGNG
以下のソースをVC6でコンパイルしようとしたところ、
#include <iostream>
class Display {
public:
    static Display& screen();
    void show() {}
private:
    Display() { std::cout << "Display()" << std::endl; }
    ~Display() { std::cout << "~Display()" << std::endl; }
    Display(const Display&);
    Display& operator=(const Display&);
};

Display&
Display::screen()
{
    static Display display;
    return display;
}

int
main()
{
    Display& display = Display::screen();
    display.show();
    return 0;
}
「error C2248: 'Display::~Display' : private メンバ (クラス 'Display' で宣言されている)にアクセスできません。
'Display::~Display' の宣言を確認してください。」
デストラクタをpublicにしたらコンパイルは通るのですが、privateではいけないのですか?
mingw/g++(3.2.3)では-Wall -Werror -g -O2で何も言われずにコンパイルできたのです。
どちらが正しいのか分からなくなrじょってきあたですす。
0768デフォルトの名無しさんNGNG
>>767
g++。VC6はダメダメだからC++の勉強には向かないYO。
0769デフォルトの名無しさんNGNG
VC6は窓から投げ捨てろ
0770デフォルトの名無しさんNGNG
それ、本当にg++の挙動の方が正しいのか?
0771デフォルトの名無しさんNGNG
>>767
デストラクタがprivateだったら誰も破棄できないやん。
staticなオブジェクトだって、プログラムが終了するときには
デストラクタが呼ばれるはずでしょ。
0772デフォルトの名無しさんNGNG
deleteするときにprivateだとまずいのでは?
同じく、newするときもprivateだとエラーじゃなかったかな?
売る覚えスマソ。
0773デフォルトの名無しさんNGNG
Display::screen から呼び出してるように見える。
private でもいけるように見える。
0774デフォルトの名無しさんNGNG
>>771
>デストラクタがprivateだったら誰も破棄できないやん。
自分のクラス内なら破棄できる。
0775デフォルトの名無しさんNGNG
メンバ関数であってもstatic変数にすると、廃棄する(デストラクタ呼ぶ)のがクラス外という扱いになるっぽい>cl&bcc32
仕様に詳しい人解説キボンヌ
0776デフォルトの名無しさんNGNG
>>774
delete this;?
0777デフォルトの名無しさんNGNG
C++のアクセス制御はオブジェクトではなくクラスに対して働く。
デストラクタがprivateでも同じクラスのメンバ関数内なら実体作れる。
0778デフォルトの名無しさんNGNG
質問があります。
クラスメソッドのGet〜()やSet〜()で引数の範囲チェックを行っていると速度的に不安になるのですが、
普通こういうのはReleaseビルド時にはチェックを行わないようにしちゃうものなのでしょうか?
0779デフォルトの名無しさんNGNG
なわけねえだろ
0780デフォルトの名無しさんNGNG
>>779
ということはみんな我慢してチェックしてるんですね、レスどうもでした
0781デフォルトの名無しさんNGNG
範囲チェックを関数側と呼び出し側のどっちに持たせるかとか
速度気になるなら範囲チェックしない版を用意するとか考えろや
デバッグ時とリリース時でコード変えたらデバッグの意味がねー
0782デフォルトの名無しさんNGNG
>>781
あっなるほど、呼び出し側でチェックするわけですか。
勉強になりますた(・∀・)
0783デフォルトの名無しさんNGNG
お願いします。わかりません。

*
* *
* * *
* * * *
* * * * *

次は、上のような表示を行うプログラムです。空欄を埋めて完成せよ。


#include <stdio.h>

int main( void )
{
int i ,j;

for(i=1; i<=5;i++){

  空欄
}
   return 0;
}
0784デフォルトの名無しさんNGNG
>>783

puts("*\n**\n***\n****\n*****");
break;
0785783NGNG
すみません。
         *
        * *
       * * * 
      * * * *
     * * * * *

でした。よろしくお願いします
0786デフォルトの名無しさんNGNG
>>785

puts(" *\n * *\n * * *\n * * * *\n* * * * *");
break;
0787デフォルトの名無しさんNGNG
______\/┏┏┏┓┛┗━━━━━┻┃┃┃
  パーツを教えてやるよ。あとは自分で考えな。
0788デフォルトの名無しさんNGNG
>>783の上の詰まってるをどうやって書くか分かれば、後は左の空白をどうするかだろ
段々、空白が減ってるから
0789デフォルトの名無しさんNGNG
ttp://aa5.2ch.net/test/read.cgi/aasaloon/1090431910/15
0790デフォルトの名無しさんNGNG
Cの質問じゃないだろ。アルゴリズムの問題。
CであろうがVB、Java、Perl、Ruby、Pascalであろうが関係ない。
よって、スレ違いかと思われる。
0791デフォルトの名無しさんNGNG
それ以前に宿題スレ逝け
0792デフォルトの名無しさんNGNG
>>785
int count=10;
{
int i=0;
for(; i<count; ++i){
  printf("% *s",count-i,"");
int j=i+1;
for(; j>0; --j)
  printf("*");
puts("");
}
0793デフォルトの名無しさんNGNG
>>792
int i, jだけでやらなきゃ駄目なんじゃね?
0794デフォルトの名無しさんNGNG
Borland C++ Builder + ADO (Not Express) でmdbをいじるなんてことやってますが
ADOを勉強しないことには進まない、位まで行き詰まってます

適切なスレ、掲示板、サイト等
いい所がありましたら、案内をお願いします
0795デフォルトの名無しさんNGNG
>>785
int i=0,j=10;
for(; i<j; ++i)
printf("% *c%s\n",j-i,' ',&("**********"[(j-i-1)*2]));
0796デフォルトの名無しさんNGNG
C++hakuso
Ruby >>>>>>>>>>>>>>>>>>>>> CCCCCCCCCCCCCC+++++++
0797デフォルトの名無しさんNGNG
main.c test1.c test2.c のソースファイルがあるとします。
#gcc -c main.c test1.c test2.c
で main.o test1.o test2.o を作成します。

test1.oとtest2.oをまとめて1つのオブジェクトを作成し、
後でmain.oとくっつけて実行ファイルを作成するには
どうやれば良いんでしょうか?
#gcc -o subprogram test1.o test2.o
とやるとmain関数がありませんって怒られます。
0798デフォルトの名無しさんNGNG
ar
0799デフォルトの名無しさんNGNG
>>797
↓じゃないの?
#gcc -o subprogram main.o test1.o test2.o
0800デフォルトの名無しさんNGNG
>>797
main.oは後からくっつけたいのです。

test1.oとtest2.oだけをくっつけたオブジェクトを作成し、
その後、作成したオブジェクトとmain.oをくっつけたい訳です。

0801デフォルトの名無しさんNGNG
C言語で、
for( int i = ...; ...; ... ){ ... }
のように、for 内で int i のように変数宣言するのは大丈夫でしょうか?
0802デフォルトの名無しさんNGNG
>>801
C99なら。
0803デフォルトの名無しさんNGNG
>>800
何故くっつけたいのか聞かせてもらおうか。
#答は既に>798にあることだし。
0804デフォルトの名無しさん NGNG
こんばんは、VC++初心者です。

<質問内容>
リストビューのアイテム毎の背景色変更についてです。
*カスタムドローにて、【猫でもわかる〜】に記載されている
処理は実現できました。
 ttp://www.kumei.ne.jp/c_lang/sdk3/sdk_261.htm
応用として、一定時間毎にリストビューのアイテムが
上から順々に背景色を変更していく処理を実現したいのですが、
散々悩んだ挙句、できませんでした。
何卒、ご教授お願いいたします。

<開発環境>
OS : Windows XP
VC : VC++ 6.0 SDK ダイアログベースアプリ
0805デフォルトの名無しさんNGNG
グローバル変数なら関数に引数として渡さないでもその関数内でも有効なんですか?
0806デフォルトの名無しさんNGNG
>805
Yes! Yes! Yes!
0807デフォルトの名無しさんNGNG
>>804
タイマー使ってできないのー?
0808デフォルトの名無しさんNGNG
>>806
レスありがとうございます

関数に引数として渡す時はどういう時なんでしょうか?
グローバル変数化してしまえば引数として渡す必要がなくなると思うんですが…
0809デフォルトの名無しさんNGNG
グローバル変数の弊害という面から調べてみろ
管理ができない・難しいという罠に陥る
コーディングという面から言うなら再帰だのが使えなくなる
0810デフォルトの名無しさんNGNG
>>809
目から鱗が落ちました
お返事ありがとうございました
0811デフォルトの名無しさんNGNG
質問なんですが
Cの構造体をC+のクラスになおしたいときのこつって
何かありますか?
0812デフォルトの名無しさんNGNG
>>811
そのまま何もしなくていい
0813デフォルトの名無しさんNGNG
public:
を先頭の行に書かなきゃ
0814812NGNG
ああ、structからclassにしたいならpublic:が必要。
0815デフォルトの名無しさんNGNG
C++でもclassではなくstructをそのまま使える。
単純にclassに書き換えるとアクセス制御がprivateになるけど、
structのままなら関係なし。
0816デフォルトの名無しさんNGNG
ファイル操作とかしてるけどそれも直さないで平気かな?
0817デフォルトの名無しさんNGNG
っつかC++勉強してから書き直せ
0818デフォルトの名無しさんNGNG
>>817
初心者歓迎のスレじゃないのかよ〜
ぬるぽ
0819デフォルトの名無しさんNGNG
C++以前に、お前のその質問を他人が読んで理解できると思うか。
「ファイル操作」とかじゃなく、もちっと具体的に書けや。
0820アイナブリッジ代理人NGNG
>>819
ファイルのヘッダなどのバイト列をstructの構造体で読み出してるのだけど
C++に変更した時はCでの手順でまずいことありますか?
0821デフォルトの名無しさんNGNG
Cでその手順が問題ないと思うなら、C++でも問題ないですよ。
0822アイナブリッジ代理人NGNG
>>821
そうなんですか。thx。
0823アイナブリッジ代理人NGNG
>>816はてな具合にことを運びたかったのでは。
0824デフォルトの名無しさんNGNG
今回、WindowsのGUI上で文字のブリンク・リバースをさせたいのですが
可能でしょうか?
(DOSならばエスケープシーケンスを使って出来そうなのですが)
環境 2000+VC6です。




0825デフォルトの名無しさんNGNG
無理にC++らしくする必要はないよ。
0826デフォルトの名無しさんNGNG
好きに文字色と背景色設定して描画しろ
0827デフォルトの名無しさんNGNG
プログラムがなかなか進まない…
プログラムの大まかなイメージができあがるまで
手は動かさないで頭の中で考えてる時間がすごく長い
こんなのでいいのかな?
一日20行程度しか進まないw
0828デフォルトの名無しさんNGNG
全然OK
0829デフォルトの名無しさんNGNG
作りたいプログラムを図にして見るとわかりやすい。
プログラム組む方がどんなプログラムを作りたいか考えるより
楽しい(という表現で正しいかは不明)のだがそんな私は
逝ってよし?
0830デフォルトの名無しさんNGNG
それはゲーム脳だな
0831デフォルトの名無しさんNGNG
なんでもゲーム脳にしてしまうこんな世の中じゃ…
0832デフォルトの名無しさんNGNG
>>830
あなたはゲーム脳脳だな
0833デフォルトの名無しさんNGNG
NO, ワタシはゲーム脳ではない
0834デフォルトの名無しさんNGNG
Yes,Sir
0835デフォルトの名無しさんNGNG
返事の前にはSirを付けろ
0836デフォルトの名無しさんNGNG
        ,.,,..::;;:::;;;::,.、,
      ,:r'^       `ヽ
     /::          :::\
    ./::: ,,,-;;;;;;...,.....,...;;-;;;;...,.::::::i     ヽ人人人/
    i;;/'|i<_O_ヽ二( <O`゙iヽ;::::!    ノ    ゝ
    l;′ヽ二/⌒ミ、二ニノ ヽ::l    ヽ    (
   _,,l;    / ^` ^´ヾ、    :::l、   丿     (_
  i │  / ,r――-、 i    i" )  ̄ヽ      (_
  ゝ .l   l i.j" ̄ ̄`jl l   l゙ ;/   )      (
   `''';   l |.l-='''''=‐/    ,r''''"   丿      ゝ
    ヽ  ヽ,`'-―-" /  ,/l      ヽ     (
     ヽ ゝ   ̄  /   .|       )   (
     ,r| ヽ、ヽ::,,;;::: ゙,/  l,,     /⌒Y⌒Y⌒ヽ
  _,,,,/ ヽ,  `''-;;;;;;-'"   丿l
''"" /   ヽ i:   ;: _/  ヽー、、
   l     \   i/     l  `'''
   l_,,,=--‐''"゙゙;r-<゙,,,,,,,    /
         |O   ""゙''''″
         |
0837デフォルトの名無しさんNGNG
Sir!Yes sir!
0838デフォルトの名無しさんNGNG
>>835
Sir!Negative, Sir!
0839デフォルトの名無しさんNGNG
VC++5.0 でhoge.libをリンクして、実行モジュールを作りたいのですが
やり方が分かりません。具体的にどうすれば良いのでしょうか?
0840デフォルトの名無しさんNGNG
プロジェクトの設定でリンカのタブから登録
0841デフォルトの名無しさんNGNG
リンクタブのオブジェクト/ライブラリモジュールに
追加すれば良いのでしょうか?
0842デフォルトの名無しさんNGNG
ソースファイルといっしょに追加できなかったっけ
0843デフォルトの名無しさんNGNG
std::stringに格納された文字列をstd::wstringに格納するにはどうすればいいのでしょうか。
wstringにchar*やstringの定義が見つからないのですが‥‥

mbstowcsなどを使用して変換するしか方法はないのでしょうか?
とりあえずstd::wstring = WideString(std::string.c_str()).c_bstr();でお茶を濁しているのですが。
(WideStringはVCL用のワイド文字列クラス)
0844デフォルトの名無しさんNGNG
DVD-RAM書き込みや、メディア(DVD)の情報を取得するには、
どのようにすればいいのでしょうか?
ご存知の方いらっしゃいましたら、教えてください。
参考になるHPを教えていただけるだけでも構いませんので、よろしくお願いします。
OS:windows2000
言語:C言語(C+ではない)
コンパイラ:VC6.0
0845デフォルトの名無しさんNGNG
>>843
割と最近そっくりな質問をどっかで見たな・・・。
C++関連のスレだった気がするので探してみると良い。
use_facet で codecvt 取得して・・後忘れた。
0846デフォルトの名無しさんNGNG
>>843,845
http://pc5.2ch.net/test/read.cgi/tech/1095583235/l50
ここの141や177を嫁。
0847845NGNG
141俺ジャン
0848843NGNG
>>845-846
ありがとうございます
やっぱりその方法ですか・・
関数書くかそのままWideStringで済ますか悩む・・・
0849デフォルトの名無しさんNGNG
>>824 では不可能
0850デフォルトの名無しさんNGNG
コンソール系の関数でできるんじゃないの?
と検索せずに言ってみる
0851デフォルトの名無しさんNGNG
んなわけねえだろボケ
0852デフォルトの名無しさんNGNG
あぁGUI上でか。
AllocConsole()してそこでやれ
0853デフォルトの名無しさんNGNG
手元不如意で持ち合わせがなかったので、Exceptional C++を立ち読みしていたところ
pimplイディオムというものを見かけたのですが、これって一般的/頻繁に使われているのですか?
0854デフォルトの名無しさんNGNG
>>853
ヘッダの依存関係が爆発してひどい目に遭ったC++プログラマなら大抵知ってる。
後付けで対応する手段としては手軽で効果が大きい。

最初から問題になるのが分かっていれば、
仮想関数と継承を使うようにしたほうがすっきりする。
0855デフォルトの名無しさんNGNG
>>854
どうやら理解してない者がいるようだ。
0856デフォルトの名無しさんNGNG
初心者用のcかc++の雑誌を教えてください
0857デフォルトの名無しさんNGNG
ポインタをインクリメントすると、ポインタ分進みますが
ポインタ+=3とかでも、3ポインタ分進むことは保証されてましたよね?

確かめてもちゃんと3つ分進んでますが、なんか急に不安になってきて。
0858デフォルトの名無しさんNGNG
石橋を叩いても渡らない香具師だな
0859デフォルトの名無しさんNGNG
>>858
昔これで失敗した気がしてねぇ
というかポインタを飛ばして進ませる事は滅多に無くて
0860デフォルトの名無しさんNGNG
>>859
それは配列をポリモフィズム的に扱っちゃったりするときのことじゃないの」?
0861デフォルトの名無しさんNGNG
>>860
あーそうです配列絡みでした
レスありがとうございました、一安心
0862デフォルトの名無しさんNGNG
>>856
Cマガでも読んでろ。
プラグラのいってることの意味がわかってきたら中級入りだ。
0863デフォルトの名無しさんNGNG
>>859
あ〜、それ自分もあったわ。
結局配列じゃなくポインタ配列で回避したけど。
0864デフォルトの名無しさんNGNG
おそらくFAQだと思うんですが

コールバックを引数に取る関数にメンバ関数のポインタを渡したいのですが

たとえばWindowsのウィンドウプロシージャなら
インスタンスのthisポインタを仕込んでおいたりできるんですが、

そういう真似ができない場合の汎用的な解決方法とかはあるんでしょうか
0865ぬるぽNGNG
はぁ〜はぁ〜
0866デフォルトの名無しさんNGNG
>>864
EnumWindowsやスレッドのようにユーザー定義引数が存在する場合はそこにオブジェクトのポインタをつっこんでreinterpret_cast<>
0867デフォルトの名無しさんNGNG
質問です。
最近オブジェクト指向(C++)に手を出している、C言語中級者です。

クラスのメンバ関数に触れたとき、
ふと関数ポインタという言葉を思い出しました。

実際関数ポインタというものを使いこなしているわけではないのですが、
関数ポインタという名前で想像できる通りの機能と解釈しています
(ここも指摘があればよろしくお願いします)

概念的には似たようなものなのでしょうか?
例え異なるとしても、この関数ポインタを利用すれば疑似メンバ関数のようになるのでしょうか?
あくまで知的探究心によるものですが、ご教授よろしくお願いします。
0868デフォルトの名無しさんNGNG
>>867
実装的には、仮想関数など関数ポインタを使ってるわけですが、
概念的には別の範疇に属するものです。

なんつうか、Cからの移行組はオブジェクト指向を学習するのに
何かにつけ実装レベルの発想で理解しようとしますが、
それはあんまり良くないですよ。


むかし、前橋氏は(ry
0869デフォルトの名無しさんNGNG
vtblってなんなのかを調べてみるとクラスの理解につながるかも。
あくまで実装面だけどね。
0870デフォルトの名無しさんNGNG
gobjectとか、Cで無理矢理やっているのを眺めるのも良いかもしれない。
責任は持たんけど。
0871デフォルトの名無しさんNGNG
>>868
返答ありがとうございます。

>概念的には別の範疇に属するものです。
そうですか…
現在パーツを作って組み合わせていく設計を極力用いて
C++でソースを書いたりしているのですが
オブジェクト指向を理解しているのか、
それともただの真似事でぜんぜん理解していないのか、自分では全く判断できず…^^;

>Cからの移行組は〜(中略)〜それはあんまり良くないですよ。
了解です。以後、念頭において学んでいきます。

>>869,870
早速参考させていただきます。
ありがとうございました。
0872デフォルトの名無しさんNGNG
C++では、staticな外部変数は無名namespaceに置き換えるのが
推奨されるということですが、staticな外部変数のままだと、
具体的に問題が生じたりするのでしょうか?
0873デフォルトの名無しさんNGNG
>>872
それは「staticにはいろんな意味があって紛らわしいから」
ということでしかない。
0874デフォルトの名無しさんNGNG
>>871
本格的に知りたければこれを読めばいい
http://www.amazon.co.jp/exec/obidos/ASIN/0201834545
0875デフォルトの名無しさんNGNG
>>871
例えばCでこんな構造体とそれを扱う関数があったとする。
typedef struct foo {
int Bar;
double Baz;
} Foo;
void fooSet(Foo * pFoo, int bar, double baz) {pFoo->Bar = bar; pFoo->Baz = baz;}
int fooGetBar(Foo * pFoo) {return pFoo->Bar;}
double fooGetBaz(Foo * pFoo) {return pFoo->Baz;}
これらはC++のクラスでこう書ける。
class foo {
int Bar;
double Baz;
public:
void set(int bar, double baz) {Bar = bar; Baz = baz;}
void getBar() {return Bar;}
void getBaz() {return Baz;}
最適化にも拠るが、実装上どちらもほぼ同じコードが出力される。
このように、「構造体とそれを扱う関数群」をまとめたものと捉えるのも一つのやり方。
#継承を考えない限り、Cからの移行にはこれでも充分有用。
#そのうちEffectiveC++辺りを読んで目から鱗を落とせばよろしい。
0876875NGNG
ぎゃぁ。>875の
>void getBar() {return Bar;}
>void getBaz() {return Baz;}
はそれぞれ
int getBar() {return Bar;}
double getBaz() {return Baz;}
の間違い。
なお、constは敢えて省いたがきちんと書くならこうなる。
int getBar() const {return Bar;}
0877デフォルトの名無しさんNGNG
初歩的な質問ですが、C、もしくはC++でディレクトリの作成や削除、ファイルの削除の仕方がわかりません。
エラい人、教えてください
0878デフォルトの名無しさんNGNG
boost::filesystem
0879デフォルトの名無しさんNGNG
なんでそういう回答しかしないの?
それで>>877が分かる人だったら
こんな質問しないでしょ?
もうちょっと考えろよ
0880デフォルトの名無しさんNGNG
お(ry
0881デフォルトの名無しさんNGNG
>>875
仰るとおり、継承を考えず、という方法ならそれなりに実現できるかと思ったわけですが、
どうも安直に考えすぎてたようで、
メンバ変数とメンバ関数のパッケージングされたものを実現する方法が思い浮かびませんでした^^;

例えば
typedef struct _foo{
  int Bar;
  void (*BarSet)( int bar );
}Foo;

のようにパッケージングした上で bar の値を Bar へ代入することは可能なのでしょうか?

C++のレベルはまだまだなのですが、細かいことが好きな性分なため(?)、
C言語びいきで、C言語にこだわってしまいまして…^^;
助言よろしくお願いします。

>>877
邪道かもしれませんが system 関数はどうでしょう?
0882デフォルトの名無しさんNGNG
>>877
結論から言う。
C/C++の規格にはそのような操作は含まれていない。
0883デフォルトの名無しさんNGNG
なんでそういう回答しかしないの?
それで>>877が分かる人だったら
こんな質問しないでしょ?
もうちょっと考えろよ
0884デフォルトの名無しさんNGNG
>>882
偉そうに規格云々の話持ち出すなら
C言語またはC++言語には`操作'なんて含まれていない
0885デフォルトの名無しさんNGNG
>>883
>>877=883じゃないならお前が答えてやると良さそう
0886デフォルトの名無しさんNGNG
>877
ディレクトリの作成や削除→_mkdir(), _rmdir()
ファイルの削除→remove()
0887デフォルトの名無しさんNGNG
ディレクトリの作成→boost::filesystem::create_directory
ディレクトリの削除→boost::filesystem::remove, remove_all
ファイルの削除→boost::filesystem::remove, remove_all
0888デフォルトの名無しさんNGNG
Windows限定ならこれでOK

ディレクトリの作成→MakeSureDirectoryPathExists
ディレクトリの削除→RemoveDirectory
ファイルの削除→DeleteFile
0889デフォルトの名無しさんNGNG
とにかく878はいっぺん死んでこい。
お前みたいなクズ二度と顔を見せるな。
0890デフォルトの名無しさんNGNG
>>878叩いてる香具師=>>877??
0891デフォルトの名無しさんNGNG
こんにちは。Boland C++ を使ってC言語で個人使用のツールを細々作っているものでs。
基本的なことですいませんが、ワイドキャラクタ用の関数群ってありますよね。これらは
どんな局面で使うのでしょうか? 「世界にはばたく」ソースを書くためには、これらの関数
を積極的に使おう、という雰囲気なのか?? よろしく m(_ _)m。
0892デフォルトの名無しさんNGNG
>>891
あなたには必要の無い物です
0893877NGNG
>>877です。
皆さんどうもありがとうござました。

>>885
>>883じゃないです。

>>886
多謝

>>888
ぐぐるとVCでのやり方は結構ヒットするんですけど、移植性の高い方法が見つからなかったもので

>>890
じゃないです

0894デフォルトの名無しさんNGNG
>>877
実際のところboost::filesystemが一番移植性が高いんじゃないか。
そもそもファイル操作というものが存在しない環境もあるわけで、
CとC++自体は規格としてディレクトリという概念やファイルの削除
という概念を含んでいない。当然移植性のある標準的な操作も
存在しない。boost::filesystemについて調べてみるといい。
Boost: http://www.boost.org/
0895デフォルトの名無しさんNGNG
いい加減にしろ878
0896887 != 878NGNG
>>895
???
0897デフォルトの名無しさんNGNG
必死で>>878を叩いてる奴は何がしたいんだよ
0898デフォルトの名無しさんNGNG
全て注目して欲しい878の自作自演だろ。必死だな878。
俺はお前みたいなヤツが一番嫌いだ。
0899デフォルトの名無しさんNGNG
そうやって俺をイラつかせて、何をしたいんだ。
俺に恨みでもあるのか。それとも人をからかうのが好きなのか。
どちらにしても、お前は悪意をもって人を傷つけようとした。
こういう事はこれで最後にしろ。
0900デフォルトの名無しさんNGNG
>>894
removeは標準ですが何か
0901デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>> ぼおst
0902デフォルトの名無しさんNGNG
boost::filesystemな・・・ポータブルパスの書式は
ディレクトリの区切り文字が '/' になってややこすぃ。
"C:\Windows\system" は "C://Windows/system" とか。
うっかりネイティブ形式の放り込むと例外が飛んでくるんで注意!
でもディレクトリ移動が '/' 演算死を使って実装してあるのはちょっと感動した。
0903デフォルトの名無しさんNGNG
>>900
標準関数として存在はしているが、
規格上はremoveはファイルを削除するように規定されてはいない。
そういう意味では>>894が正解。
あげあし取りでスマソ。

とりあえず参考ページ
http://www.bohyoh.com/CandCPP/C/Library/remove.html

実質的にはファイルの削除だ罠
0904デフォルトの名無しさんNGNG
>>903
だから何?remove使って何か問題あるのかね?
0905デフォルトの名無しさんNGNG
>>902
っつかWindows(DOS)って何でディレクトリの区切り文字を'\'にしたの?
ディレクトリはUNIXから拝借したんじゃないの?
0906デフォルトの名無しさんNGNG
>>902
悪いオーバーロードの典型だな。
0907デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1096696253/
から来ました。

spawnlの使い方もしくは、外部のプログラムを実行して、そのプロセスを終了させないで、制御を元のプログラムに戻す方法を教えてください。

spawnl(_P_NOWAIT , "パス + 実行ファイル名" , "NULL");

としてもうまくいかず強制終了されてしまいます。
0908デフォルトの名無しさんNGNG
>>907
なんで環境かかないかな
0909デフォルトの名無しさんNGNG
>>905
オプションが'/'で始まる仕様だったから。

ファイルの概念の無い環境は知らんが、BTRONにはディレクトリの概念は無いよね。
#いやさ、リンクで擬似的に実現できるんだけど".."がお手上げでね。
0910デフォルトの名無しさんNGNG
>>907
誘導したの漏れだけど、黙って移動するかな。おまけにこっちで環境書かないし。

で、改めて言うけどLSI-Cはやめとけ。ロングファイル名にも対応できないんだから。
0911デフォルトの名無しさんNGNG
>>909
ほぅ
そこのボタンの掛け違いはいつ起こったんですか?
ご存知の方いるかな?
0912デフォルトの名無しさんNGNG
> int getBar() const {return Bar;}

このconstってどういう意味?
0913デフォルトの名無しさんNGNG
>>911
元々MS-DOSはUNIXじゃなくてCP/Mの真似だから。
つか、最初はディレクトリもなかったしな。
0914デフォルトの名無しさんNGNG
mutable を見た PG を鬱にさせるおまじない
0915デフォルトの名無しさんNGNG
>>913
CP/Mってオプションはやっぱ'/'だったんですかね?
0916デフォルトの名無しさんNGNG
>>912
「getBarではメンバ変数(Barとか)に変更を加えない」という宣言
0917907NGNG
黙っての移動すいませんでした。
以後気をつけます。

環境はボーランドのコンパイラです。
0918デフォルトの名無しさんNGNG
>>916
おお、ありがと!
0919デフォルトの名無しさんNGNG
>>915
CP-Mならよかったんだけどねぇ。
0920デフォルトの名無しさんNGNG
絶対値を求める演算子を教えてください
調べても出てきませんでした
0921デフォルトの名無しさんNGNG
文字列がatofで変換できるか調べるには
自前で関数用意するしかないですか?
0922デフォルトの名無しさんNGNG
>>920
int型でいいならabs()関数
あとはMSDN見ればわかるだろう。
0923デフォルトの名無しさんNGNG
>>922
MSDN使っていると言う前提は如何な最中。

>>921
「変換できるか」の定義に拠るが、strtod()を使えば文字列のどこまでを変換に使ったかは判る。

>>920
そういう演算子は無い。
0924デフォルトの名無しさんNGNG
>>920
そういう関数でやれ。
<cstdlib>
int:abs
long:labs
long long:llabs

<cmath>
double:fabs
float:fabsf
long double:fabsl
0925デフォルトの名無しさんNGNG
>>922
>>923
>>924
お返事ありがとうございます

abs()関数を使ってみます
0926デフォルトの名無しさんNGNG
>>923
すいません、今携帯でかつ調べる手段がないのでその関数の詳細教えていただけますか?
因みに基準は文字列が数字とピリオド1つで構成されているかです。
0927デフォルトの名無しさんNGNG
>>926
これなら携帯でも調べられるだろ。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtod.3.html
0928デフォルトの名無しさんNGNG
>>923
927
解決しました。ありがとうございます。
0929デフォルトの名無しさんNGNG
Kdevelop使ってる人いますか?
情報が少なすぎで困っています。
0930デフォルトの名無しさんNGNG
関数の戻り値としてx座標とy座標の2つを指定できるのでしょうか?
いろいろな例をみていると1つしか指定できないみたいなので
(x、y)を戻り値として返すことはできるのでしょうか?
0931デフォルトの名無しさんNGNG
void hoge(int *x, int *y);

or

class Point {
    int x_, y_;
    //blah, blah, blah
};

Point hoge();
0932デフォルトの名無しさんNGNG
std::pair<int, int>とか
0933デフォルトの名無しさんNGNG
>>930
C++だったら>>932がスマートだと思う。

Cだったら>>931の2つかグローバル変数しか方法はなさそう。
classじゃなくてstructしか使えないけど。
古いコンパイラだと構造体の実体は返せないので注意。
0934デフォルトの名無しさんNGNG
>>931
>void hoge(int *x, int *y);
この方法は何という名の方法なんでしょうか
わからないので検索して調べてみたいのですが
なんて調べたらいいのかわからないもので…

>>932
調べてみます
>>933
c++.netなんですけどreturnで構造体をかえせるか試してみます

レスありがとうございました
0935デフォルトの名無しさんNGNG
最近C++を学び始めたのですが二進数表示にするマニピュレータとかってないんでしょうか。
回転とかシフトなどビット単位で計算することってC++やCではよくあると思うのですが。
0936デフォルトの名無しさんNGNG
返せないわけないだろ
0937デフォルトの名無しさんNGNG
Cでint型をString型に変換するにはどうすればいいのでしょうか?
JavaでいうtoStringやParseIntみたいなAPIはあるのでしょうか?
0938デフォルトの名無しさんNGNG
通は8進表示でビットデータを読みます
0939デフォルトの名無しさんNGNG
>>937
sprintf関数?
0940デフォルトの名無しさんNGNG
CにはString型はないんだけどsprintfでがんがれ

ほとんどの環境でitoaがあると思うけど。
0941デフォルトの名無しさんNGNG
>>937
なんですか? String型って。
0942デフォルトの名無しさんNGNG
>>940-941
多分managed C++のアレですよ。
0943デフォルトの名無しさんNGNG
>>934
>void hoge(int *x, int *y);

「参照渡し」とかでぐぐれば見つかるんじゃない?
ポインタを理解してれば自動的に理解できると思うんだけど。
0944934NGNG
>>936
安心して使ってみます
>>943
まだポインターは理解してないので
これから勉強しようと思います

レスありがとうございました
0945デフォルトの名無しさんNGNG
>935
unsigned char型を2進表記しようとしてこんなん

unsigned char uchar = 'c';
for(short i=sizeof(unsigned char)*8-1; i>=0; --i){
if( (uchar>>i) & 1U ){
bset[index++] = 1;
}else{
bset[index++] = 0;
}
}

書いたことある。bsetはなんらかのbitsetのインスタンスね。
もっと簡潔にするなりテンプレート化するなりはだれか偉い人やって(;´Д`)
0946デフォルトの名無しさんNGNG
charが8bitだと誰が決めたのか
0947デフォルトの名無しさんNGNG
Rubuy ???????????????????????>>>>>>>>>>>>>>>
0948デフォルトの名無しさんNGNG
>>945
こんなもんでどうよ。
コンパイラによっては警告くらいは出ちゃうかもしれんが。

unsigned char uchar = 'c';
_Bool bset[sizeof(unsigned char)*8];

for(int i=0; i<8; i++) bset[i++] = (((128>>i) & uchar)!=0);
0949デフォルトの名無しさんNGNG
pppppuuuuuuuuuuuuuuuuuuuuuuuuuぷううううううううううううううううううううう
0950デフォルトの名無しさんNGNG
>>935,945
…std::bitset::to_string()
0951デフォルトの名無しさんNGNG
doubleとfloatの時はどーすんだよ・・・
0952デフォルトの名無しさんNGNG
>>951
doubleとfloatのビット列、見てどうすんの
0953デフォルトの名無しさんNGNG
>>951
昔GCCスレに書いたもの(dat落ちって言うんですか?)を再掲しましょう.
#include <iostream>
#include <bitset>
template <class T> std::ostream & output_as_bits (std::ostream &p_os, const T &p, bool ascending_order = true) {
std::bitset <sizeof (T) * 8> p_bit; const char *pp (reinterpret_cast <const char *> (&p)); char byte_digit (1);
for (size_t i (0); i < p_bit.size (); ++ i) {
p_bit.set (i, static_cast <bool> (*pp & byte_digit));
if ((i + 1) % 8) byte_digit <<= 1;
else {byte_digit = 1; ++ pp;}
}
if (ascending_order) {
p_os << "L"; size_t i (0);
while (i != p_bit.size ()) {p_os << p_bit.test (i); ++ i;} p_os << "H";
} else {
p_os << "H"; size_t i (p_bit.size ());
do {-- i; p_os << p_bit.test (i);} while (i != 0); p_os << "L";
}
return p_os;
}
int main () {
int i0 (10); float f0 (10);
output_as_bits (std::cout, i0) << std::endl;
output_as_bits (std::cout, f0) << std::endl;
return 0;
}
0954953NGNG
>(dat落ちって言うんですか?)
「ウェブブラウザで見れないのは」が抜けてました.
0955デフォルトの名無しさんNGNG
どうでもいいけど、VCだとbitset<N>はbitset<1>の場合でも構造体サイズを4バイト消費するんだね。
フラグが3つ以下の場合はbitsetで実装するよりbool型変数3個の方がマシということだね。
ま、そんなことよりマスキング速度やソースコードの保守効率が大事なのだろうけど。
0956デフォルトの名無しさんNGNG
878は死ね
0957デフォルトの名無しさんNGNG
bitset<1>の応用例を教えてください
0958デフォルトの名無しさんNGNG
たとえば,
mycls a,b;
a.x = 3;
として,myclsのインスタンスa,bを用意してaのメンバ変数xに3を代入して,
それをb.xのようにして参照することは可能ですか?
class でunionっぽいものを作りたいんですけど。
0959デフォルトの名無しさんNGNG
>>958
aかbかどっちかを参照にするか、あるいはxを静的にするかしろ。
0960デフォルトの名無しさんNGNG
>>958
やりたいことが明確にわからないが。

// mycls 内のxを共有する。
class mycls{
static int x;
};

// a と b が同じオブジェクトを参照するようにする。
mycls a;
mycls &b = a;
0961958NGNG
thx
0962デフォルトの名無しさんNGNG
>>956
知らなかったからってひがむなYO!!!
0963デフォルトの名無しさんNGNG
//構造体宣言
struct a
{
int x,y;
};
//プロトタイプ宣言
void func(a b[]);

int c;
std::vector<struct a> b(c);
・
・
・
func(b[2]);
・
・
・
void func(a b[])
{
・・・・
}

このような感じで関数の引数として構造体を渡すと
error C2664: 'func' : 1 番目の引数を 'a' から 'a []' に変換できません。
というエラーが出てきます
どうしたら構造体を渡せるのでしょうか?
0964デフォルトの名無しさんNGNG
>>963
面白いよ君。
いや嫌味じゃなくて、その発想は大切にしたまい。
0965デフォルトの名無しさんNGNG
>>963
func(b[2]); → func(&b[2]);
0966デフォルトの名無しさんNGNG
>>965
//構造体宣言
struct a
{
int x,y;
};
//プロトタイプ宣言
void func(struct a b[]);

int c;
std::vector<struct a> b(c);
・
・
・
func(&b[2]);
・
・
・
void func(struct a b[])
{
・・・・
}

に変更したところエラーがでなくなりました
ありがとうございました


0967966NGNG
何がしたかったかというと
b[2]の内容をfunc内で参照したかったのです

b[]をグローバル変数にすればいいとも考えたのですが
std::vector<struct a> b(c); のcの部分はいろいろ変わるので
グローバル変数にできなさそうでした

あと、話は変わりますが
関数A内で関数Bを呼び出さない場合
関数A内で宣言された変数を他の関数B内で参照するにはどうすればいいのでしょうか

0968デフォルトの名無しさんNGNG
>>967
>b[2]の内容をfunc内で参照したかったのです
その例では、値渡しも明快だと思う。
void func(struct a b) /* structは省略してよい。 */
{
}
std::vector<a> b(c);
func(b[2]);

>関数A内で関数Bを呼び出さない場合
>関数A内で宣言された変数を他の関数B内で参照するにはどうすればいいのでしょうか
自動変数(普通の関数内変数)はその関数の実行中しか存在しないから、
そういうことはできない。
0969デフォルトの名無しさんNGNG
>>968
>自動変数(普通の関数内変数)はその関数の実行中しか存在しないから、
>そういうことはできない。

今作ってるプログラムは関数A内で求めた結果を
他の関数でも自由に参照できないと困るプログラムなんですが
せっかく求めた結果が使えないなんて…

代替えの方法もないのでしょうか?
0970デフォルトの名無しさんNGNG
>>969
戻り値とか参照・ポインタ渡しにするとか
0971デフォルトの名無しさんNGNG
>>969
>今作ってるプログラムは関数A内で求めた結果を
>他の関数でも自由に参照できないと困るプログラムなんですが
ターミノロジが非常に怪しいのでコードで具体例を示された方がいいですよ
(入門書を一通り読まれることをお薦めします)

int func ()
{
int result (0);
return result;
}
0972デフォルトの名無しさんNGNG
私が>>969の上司なら間違いなく>>969を開発から外す。
0973デフォルトの名無しさんNGNG
>>972
そんなことは言う必要はない
0974デフォルトの名無しさんNGNG
まだC言語を勉強し始めて二週間程度の初心者ですがポインタの概念がよく分かりません
よく分からないというかポインタを使うメリットが明確に書いてある参考書に巡り会っていないので
何でポインタを使わなければならないのかが理解できないのです。ポインタのメリットを教えていただけないでしょうか?
宜敷お願いします。
0975デフォルトの名無しさんNGNG
それはポインタを理解してないだけだろ
0976デフォルトの名無しさんNGNG
>>974
#include <stdio.h>
void FuncA(int n) {n = 1;}
void FuncB(int *p) {*p = 1;}

int main() {
  int i = 0;
  FuncA(i);
  printf("%d", i);
  FuncB(&i);
  printf("%d", i);
  return 0;
}
0977デフォルトの名無しさんNGNG
ポインタ一切使わないC,C++プロジェクトなどほとんどないと思うが・・・。
shared_ptrや参照しか使わないってなら納得がいくが。
0978デフォルトの名無しさんNGNG
>>977
まぁまだ二週間だからね
0979デフォルトの名無しさんNGNG
>>975
理解していないと書いてあるように見えるが。
0980デフォルトの名無しさんNGNG
>>979
良く嫁
0981デフォルトの名無しさんNGNG
>>974
おーばーへっどの軽減。
0982デフォルトの名無しさんNGNG
>>974
「使うメリット」というと981の他には以下のような間接性?を利用した実行時の分岐があります
ポインタを使わない場合表示部をディスパッチ部の全ての節に散りばめることになります
#include <stdio.h>
#include <stdlib.h>
int main (const int argc, const char *argv []) {
// 引数の数をチェック
if (argc != 2) exit (1);

int a0 = 0;
int a1 = 1;
int *p = NULL;

// a0 a1どちらを表示するかディスパッチ
if (argv [1][0] == '0')
p = &a0;
else if (argv [1][0] == '1')
p = &a1;

// 表示
if (p)
printf ("%d\n", *p);
return 0;
}
結果 (プログラム名をhogeとして)
hoge 0 -> 0
hoge 1 -> 0
0983982NGNG
結果を書き間違っちまった
hoge 0 -> 0
hoge 1 -> 1
0984デフォルトの名無しさんNGNG
正直Rubyの方がC++よりエレガント。
0985デフォルトの名無しさんNGNG
>>980
ほかにどう読めばいいんだ。
0986デフォルトの名無しさんNGNG
多分、ポインタの概念とその使い方の理解という点で理解していないって
表現が食い違ってるだけだろ
0987デフォルトの名無しさんNGNG
他の言語の下地があると、新たにCを学ぶ時に結構混乱すると思う。
で、せっかちor勉強嫌いな人は

A.「Cは糞」認定して挫折を誤魔化す。
B.文字列が理解できず他スクリプト言語と同じことをやってバッファオーバフローを埋め込みまくる。

このいずれかへ進路をとることになる。
Aの人はクダを巻くだけで他人への迷惑はないのだが、問題はBの人だ。
0988デフォルトの名無しさんNGNG
>>982
あえてそんな変な例出さなくても・・・。


可変長配列もマップもツリーもリストもポインタ使う。
0989デフォルトの名無しさんNGNG
リストかツリーでも書いてみれば必要性がわかるんじゃない?
まぁポインタのかわりに整数でも実装できるけどさ
0990デフォルトの名無しさんNGNG
>974
ポインタとは「アドレスを指す変数」のこと。
C言語がポインタを使うのは、所詮「高級アセンブラ」であるため。
ポインタのメリットとかいう問題ではない。
C++を経て、ポインタを排除したのがJava。
0991デフォルトの名無しさんNGNG
ぬるぽ
0992デフォルトの名無しさんNGNG
  ___   ガッ
/___|ミ      ガッ
   .||  ヾ ミ 、      ガッ
   ∩_∧/ヾヽ
   | ,| ゚∀゚). .|  |;,      ガッ
  / ⌒二⊃=|  |∵.
 .O   ノ %`ー‐'⊂⌒ヽ  ガッ
   ) ) ) )~ ̄ ̄()__   )  ←>>991
  ヽ,lヽ) (;;;;;;;;;;;;;;;;;)(_(
次スレまだー?
0993デフォルトの名無しさんNGNG
878は師ね
0994デフォルトの名無しさんNGNG
>>990
Javaはポインタを排除したのではない。隠蔽したのだ。
0995デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>>>>878
0996デフォルトの名無しさんNGNG
string str = null; str.compareTo(str);
0997デフォルトの名無しさんNGNG
>>990
C言語でポインタを使うことは強制されてないよ。配列を扱うために用意されたもの。
0998デフォルトの名無しさんNGNG
RUBY!!!!!!
0999デフォルトの名無しさんNGNG
るううううううううううううううううううううbっっっっっっっっy
1000Ruby最強!NGNG
1000ならC++は死滅
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。