【初心者歓迎】C/C++室 Ver.9【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGただしその場合、質問者は必ず、環境を書きましょう。
【歴代スレ】
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デフォルトの名無しさん
NGNGC言語なら俺に聞け! 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乙
0006前スレ976
NGNG>処でこの問題の場合、「手」をクラス化しました。
>しかし、コンピュータの手とオペレータの手を纏めてしまったために
>オペレータ同士の対戦にしたりコンピュータ同士の対戦にすることができません。
>このような改修に耐えられるように手はそれぞれ独立したオブジェクトとして扱えた方が面白いでしょうね。
言われたとおりに、それぞれの「手」を独立した形にしてみました。
が、やっぱりどうもゴチャゴチャしている様な気がします。。。
宜しければマズイ箇所などがあればご指摘の程をお願いします。
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前スレ976
NGNGprotected:
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前スレ976
NGNG{
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デフォルトの名無しさん
NGNGclass 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{
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;
}
0012デフォルトの名無しさん
NGNGおれだったらこんな感じ
#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デフォルトの名無しさん
NGNGint 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デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNGstrB[128][256];
という二つの文字列配列があるとして、
strAのLA列目のNA文字目を
strBのLB列目のNB文字目にコピーするにはどうしたらいいですか?
001615
NGNG0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGhttp://www.athomejp.com/goldfish/mfc/cobject/jpegview.asp
ここを参考に、ダイアログに描画はできてますが、
SDIで、同じ方法をもちいりましたが、view領域(?)に描画ができません
わかる人おしえてください
0019旧979
NGNG>> 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コンパイラによってはサポートしてたりします.
g++とか.検索してたら,どうやらVC++もそうなのかな?
0021前スレ976
NGNG>>9
ずいぶんスッキリしましたね。
手のチェックメソッド(この場合judge())を手自体のstaticメソッドにしてるんですか。
ハッキリ言って僕のcjankenクラスは不要でしたね。。。
>>12
今回はそれぞれの「手」を独立したオブジェクトにしてのプログラムという事だったので。。。
でも、mapを使うのはより象徴的になってよさげですね。
やはり、人の書いたコードを見るのは勉強になります。
色々なご意見ありがとうございました。
0023デフォルトの名無しさん
NGNGこの配列の全要素に一括で同一の値を代入することってできますか?
今のところ、ループを回して逐次代入しているのですが。
0024デフォルトの名無しさん
NGNG#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例えばabcdefgとabcdを比較したらefgと帰ってくるようにしたいです。
もしくは、PHPでいうところのsubstrのような
文字列の〜文字目から〜文字目までを返すような関数ってないでしょうか。
0026デフォルトの名無しさん
NGNG002725
NGNG0028デフォルトの名無しさん
NGNGn×mの単純な長方形的になっていれば良いということですね。問題ありません。
>v.begin()〜v.end() のループを自前で回すと、
>パフォーマンスを上げることができるかも知れない。
明日試してみます。
ありがとうございました。
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNGchar s1[] = "abcdefg", s2[] = "abcd";
printf("%s\n", strstr(s1, s2) + strlen(s2));
0033デフォルトの名無しさん
NGNGchar* 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デフォルトの名無しさん
NGNGsprintf(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デフォルトの名無しさん
NGNGhttp://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なんか質問文が矛盾しまくってるのは気のせいか?
003734
NGNGどのへんでしょうか?
何バイト分詰め込みたいかは状況によって変わるので、
nバイト分ということで汎用性を持たせて組みたいのです。
文字列や文字列配列の容量は余裕を持たせていますが、
文字列配列の方は、列数が足りない場合
自動的に増減させたいのですが、そういう組み方が分かりません。。。
最後の5行は、こんな感じでやればいいのかなぁ・・・
とは思って書いたのですが、もっと効率の良い方法があるのかもしれません。
どうかよろしくお願いします。
003836
NGNG>まだ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デフォルトの名無しさん
NGNGint 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; // コピーしたバイト数
}
004134
NGNG一応Cの標準の関数だけでやりたいのです。
stl使ってないので他の部分が動かなくなりそうです。
004234
NGNG004334
NGNG文字列を一文字ずつ走査し、全角か半角かを判別する処理を作っています。
IsDBCSLeadByteを使うと、ひらがなや全角アルファベット大文字は
問題なく全角として判定できているようなのですが、
漢字や全角アルファベット小文字などがうまく判定できていないようです。
isleadbyteを使った場合は、unsignedにキャストしてますが
全て0が帰ってきてしまいます。
単純にコーディングミスの可能性もあるかもしれませんが、
何かうまく判定する方法があったら教えて下さい。
よろしくお願いします。
0044デフォルトの名無しさん
NGNGなんのコンパイラ使ってるのか知らんけど、
VC++ならこんな関数があるよ。
_ismbbkana()
0045デフォルトの名無しさん
NGNG問題ないみたいだけど?
004634
NGNGどうもです。判定する文字列は半角全角問わず、
ひらがなカタカナローマ字など色々入っている可能性があって、
最終的には全角か半角かができればいいです。
_ismbbkanaは半角カタカナを判定できるみたいですが、
それ以外のものも一括で判定したいです。
_ismbbleadというのも発見したのですが、
IsDBCSLeadByteと同じ結果しか得られませんでした…
>>45
マジですか。でもコーディングミスだったら
こんなに規則的にならないような気がするんですよね。
並び順とか関係なく必ず全角小文字ローマ字のところは
変になってるみたいです。漢字はものによってって感じです。
ひらがなは絶対成功してるようです。
何が違うのかちょっと謎なんですが、もうちょっと検証してみます。
004734
NGNG0048デフォルトの名無しさん
NGNGassert(::IsDBCSLeadByte(*"a"));
...
assert(::IsDBCSLeadByte(*"z"));
アサーションに掛からないよ?
0049デフォルトの名無しさん
NGNGでは、以下のコードで「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;
}
005048
NGNGVC7.1+XPSP1
で試した。
005134
NGNGわざわざすいません。ありがとうございます。
なんとなく原因が判明しました。
カウンタを進める処理に間違いがあったみたいで、
判定関数に全角文字の2バイト目を入れてしまった場合に
ひらがななどは0が帰ってくるのですが
全角ローマ字小文字などの今までうまくいっていなかった文字では
1が帰ってきていました。
そのため不具合が起きていたようです。
お騒がせしました。ありがとうございました。
0052デフォルトの名無しさん
NGNG1msの物を必要としています。time.hでは精度が悪く50msしかとれず,
マルチメディアタイマーを使用しようとしてもうまくいきません。
環境はBorland C++ を使用しています。
もしなにかいい方法を知っている方がいたら教えていただきたいのですが。
0053デフォルトの名無しさん
NGNGtimeEndPeriod(1);
の間でマルチメディアタイマーを使えば良い。
あとはQueryPerformanceCounterとかCライブラリのclockとかかな?
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNGwindows.hにGetTickCount、timeGetTimeがあるけど、
それでも10ミリ秒ぐらいかな。1ミリ秒は難しいかも。
0057デフォルトの名無しさん
NGNGsetlocaleでデフォルトの"C"から変更していないとisleadbyteは常に0を返すよ。
0058デフォルトの名無しさん
NGNGC++を使ってゲームを作ろうと思っているのですが、DirectXで苦労しています。
正直、ライブラリを自分で作るだけの能力が今はないので、
他で公開されているライブラリを利用して作ろうと思っています。
そこで、お勧めのライブラリがありましたら紹介していただきたいです。
よろしくお願いします。
0059デフォルトの名無しさん
NGNG「やねうらお」でぐぐってみそ
0060デフォルトの名無しさん
NGNGSDLとかAllegro
0061デフォルトの名無しさん
NGNGHDC hdc;
LPTSTR lptStr = TEXT("111");
hdc = GetDC(hWnd);
TextOut(hdc , 0 , 0 , lptStr , lstrlen(lptStr));
ReleaseDC(hWnd , hdc);
これだと111が表示されるのですが
変数Aの内容を表示させたい時はどうすればいいのでしょうか?
VC++.netです
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNG#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氏ねやマルチ
0070デフォルトの名無しさん
NGNGchar str = "jpnkor";
printf("%.3s\n", str); //こんなんのC++流
std::cout << std::setw(3) << str << std::endl; //うまくいかない
0071デフォルトの名無しさん
NGNGboost使っていいなら
#include <iostream>
#include <boost/format.hpp>
int main () {
char *str = "jpnkor";
std::cout << boost::format ("%.3s") % str << std::endl;
return 0;
}
0072デフォルトの名無しさん
NGNGってことは標準ではそんな都合のいいものは無いのか
レス�dクス
0073デフォルトの名無しさん
NGNGHDC hdc = GetDC(hWnd);
TCHAR szBuf[32];
wsprintf(szBuf, "%d", a);
TextOut(hdc, 0, 0, szBuf, lstrlen(szBuf));
ReleaseDC(hWnd , hdc);
0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNGレスありがとうございます
早速試してみます
0077デフォルトの名無しさん
NGNGレスthx。stringクラスなら切り出しができるんですね
やっぱchar配列はむりぽ(´・ω・`)
printf群使いまつ
0078errno84??
NGNGまた最適化オプションで回避しても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??
NGNGerrno 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デフォルトの名無しさん
NGNGgcc (GCC) 3.4.1 (cygming special) で実行してみたけど、全部 0 => No error になった。
というわけで環境きぼん。
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNGnnn.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上(gcc)は #include <string.h> すると黙る
0086デフォルトの名無しさん
NGNGウインドウ内での座標(ウインドウの一番左上の座標を(0,0)とした座標)
を得るにはどうすればいいのでしょうか?
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNGレスありがとうございます
ScreenToClient() を検索してみましたが使い方いまいちわかりませんでした
GetCursorPosで得たスクリーン座標をウインドの座標に変換する時は
そのように使えばいいのでしょうか?
0089デフォルトの名無しさん
NGNG考えろ。調べろ。
0090デフォルトの名無しさん
NGNGGetCursorPos(&pos);
ScreenToClient(hWnd, &pos);
0091デフォルトの名無しさん
NGNG実行ファイルが500kbにもなったんですが、もっとファイルサイズを抑えられませんか
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNGお返事ありがとうございました
おかげさまでちゃんとできました
0094デフォルトの名無しさん
NGNG0095errno84??
NGNG環境を書き忘れていました。すいません。
gcc (GCC) 3.2.3
ja_JP.eucJP
となっております。
0096デフォルトの名無しさん
NGNGこの商の4の部分だけが欲しい場合どうすればいいのでしょうか
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNGれすありがとうございます
21/5=4.2にならないのでしょうか
4の部分だけが欲しいんです
0099デフォルトの名無しさん
NGNG自分で試してごらんなさい
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG21/5だっつってんだから試すなりしろよ。
あと入門書嫁
0102デフォルトの名無しさん
NGNG>>100
>>101
早速試してみます
ありがとうございました
0103デフォルトの名無しさん
NGNG独自のalloc関数で確保したメモリにクラスを割り当てたいのですが、
newかローカル宣言するしか仮想関数テーブルをセットする方法が
ないみたいで、今はこうやっています。
{
//newでないので、この時点ではテーブルがセットされない。
ClassA* a = my_alloc();
//ローカル宣言したオブジェクトをコピーすることでテーブルをセットする・・・
ClassA temp_a;
memcpy(a, &a, sizeof(a));
}
グローバルnewをオーバーロードするという手もありますが、大掛かりに
なってしまうので、仮想関数テーブル「だけ」をセットする
やり方があればご教授ください。
0105デフォルトの名無しさん
NGNG困った問題にぶつかってしまいました。
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で閉じているかは確認済みなのですが...
よろしくお願いします。
0107デフォルトの名無しさん
NGNGplacement newじゃ駄目なの?
0108デフォルトの名無しさん
NGNGstd::uninitialized_fill
0109デフォルトの名無しさん
NGNG解決にはならないかもしれないが
http://www.s34.co.jp/cpptechdoc/reference/memory/index.html
0110デフォルトの名無しさん
NGNGありがとうございました。
プログラムのバグではないようなので安心しました。
0111デフォルトの名無しさん
NGNG1000ファイル同時に開くなんて,ものすごいプログラムですね.
0112デフォルトの名無しさん
NGNGどのようにすればいいのですか?
0113デフォルトの名無しさん
NGNGそうか?socketだと大量に使うぞ?
0114デフォルトの名無しさん
NGNG>>86
0115デフォルトの名無しさん
NGNG同時じゃないぞ。つーか、普通無理。
0116デフォルトの名無しさん
NGNG90 名前:デフォルトの名無しさん[sage] 投稿日:04/09/11 09:01:48
POINT pos;
GetCursorPos(&pos);
ScreenToClient(hWnd, &pos);
のどこをどう変更したらいいのかわかりません
0117デフォルトの名無しさん
NGNG同時じゃありません。
開いて閉じての繰り返しです。
0118106,111
NGNGすみません.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;
}
0119103
NGNGクラスのアロケートを複数の方法から、動的に選択したいという都合があって。
グローバル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真面目に言ってる?
まず POINT の意味を調べてみれ。
それで分からなかったら知らん。
0121106,111
NGNG因みに
gcc 3.1 20020420 on Darwin Kernel Version 6.8
でもエラーは出ません.
ひょっとして閉め忘れてませんか?
0122デフォルトの名無しさん
NGNG早速調べてみます
ありがとうございました
0123デフォルトの名無しさん
NGNGサンプルプログラムありがとうございます。
問題なく動作しました。
やはりプログラムに問題がありそうですね。
閉じ忘れも確認しましたが、大丈夫だと思います。
データの書き出しは他の汎用ライブラリに任せているので、そのライブラリの問題かもしれませんが
まだ、きり分けができておりません。
とりあえず、テストファイルを開くだけのプログラムを作成してみます。
0124デフォルトの名無しさん
NGNGCHoge hage;
printf("%s\n", hage);
のように記述してCHogeクラス中で持っている文字列を
printf()に渡して表示させることって可能でせうか?
0125124
NGNG0126デフォルトの名無しさん
NGNGできません。
prinf("%s\n", hage.getStr());
のようにするのが通常です。
getStr()は内部で持っている文字列を返すメソッド
0127デフォルトの名無しさん
NGNGclass CHoge {
char *lpString;
};
lpString が CHoge の最初のメンバでなきゃだめだし、
他のクラスを継承していてもだめだ。
とてもじゃないがお勧めできない。
コンパイラにも依存する…?
0128デフォルトの名無しさん
NGNG持っている文字列をかえす関数をCHogeに装備。
0129124
NGNG...に渡した変数がどういう型として扱われるのかが判れば
operator定義でなんとかならんかなぁとか思ったんですが、
やっぱむりぽ?
0130デフォルトの名無しさん
NGNGこの場合は va_list の仕組みというより printf の仕組みでしょ。
%s だから文字列ポインタとみなす、という。
0131デフォルトの名無しさん
NGNGこんなかんじ?
#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());
}
0132124
NGNGC++の仕様的に動作が保証できる方法が無いかとちと考えてた訳です。
でも、やっぱムリぽですね。
レスくれた皆様ありがとうございました。
0134デフォルトの名無しさん
NGNGそういう要求のために iostream が設計されたんだろうけどな。
0135124
NGNGclass CHoge{
public:
operator char* (void) { return m_pStr; }
protected:
char* m_pStr; // 文字列を保持してるメンバ変数
};
とかしておくと
printf("%s", (char*) hage);
でいいわけです。
つうことはデフォルトのキャストが判ればそれをoperatorで定義しとけば...?
てなことを考えてた訳です。
0136デフォルトの名無しさん
NGNGclass 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お恥ずかしながらプログラムのミスでした。
opendir()
に対応する
closedir()を書き忘れいたことが原因のようです。
勝手な推測ですが、FILEとDIRの型は内部的には同じものを使っていて、
>>106の問題に当たってしまったものの
エラーがfopenだったため、closedirに気付かなかったという流れだと思います。
いろいろありがとうございます。
0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNGそれやるくらいなら普通にやった方が自然だね
0142デフォルトの名無しさん
NGNGありがとうございます。
fstatやっていれば、もっと早く分かっていたっぽいですね。
ディレクトリを再帰で開いているところがあり、まだ問題が残って
いる可能性が高そうなので、一度確認してみます。
0143デフォルトの名無しさん
NGNGarray配列の先頭ポインタを渡してるだけなのに。
例えば
int ReturnArraySize(int* array){
int size=sizeof(array)/sizeof(array[0]);
return size;
}
では、配列の要素数を返してくれないのは納得できるのですが...
ちなみにスコープ内で配列サイズが分かるということで合ってます?
0144デフォルトの名無しさん
NGNGarrayはポインタと同じように使えるだけ。
0145デフォルトの名無しさん
NGNG「コンパイラが コンパイルする時」は、その配列が確保したサイズはわかってるよね。
よく観察してみよう
0146デフォルトの名無しさん
NGNG多分それ常に1が返ると思うぞ。
0147143
NGNGsizeof(array)はその配列全体サイズを返すという配列特有の
処理を施しているという事でしょうか。
スコープ外では必然的にポインタとして渡す事になるから...umm
0148デフォルトの名無しさん
NGNGsizeofを関数だとでも勘違いしてないか?
0149デフォルトの名無しさん
NGNGint a[100];//aが100ってわかってる
size = sizeof(a);//コンパイル時に size = 100;になる
size = sizeof(a[0]);//コンパイル時にintのサイズになる
0150デフォルトの名無しさん
NGNGint* p = a;
size = sizeof(p); // pのサイズ==int*のサイズ==4になる
0151デフォルトの名無しさん
NGNG4とは限らない
0152デフォルトの名無しさん
NGNGこういう場合はそういうつっこみはしない方がいいと思う。
>>143が混乱しそう
0153デフォルトの名無しさん
NGNGそうかなあ、>149はちゃんと正しく書いてるのに。
int*が4と覚えられたらまずいと思うな。
0154デフォルトの名無しさん
NGNG正しくないよ。
>size = sizeof(a);//コンパイル時に size = 100;になる
size = intのサイズ*100になる
0155デフォルトの名無しさん
NGNGほんとだ
0156143
NGNGC解説サイトに書いてました。なんとなく腑に落ちたような。
int*が4とは限らないというのは一応知っているつもりですが。いちおう...
>>148
確かにそういう風に思ってたかも。でも、演算子ってなんなんだ
って逆に思ってしまった。なんだか、キリがないですね。すみません。
0157デフォルトの名無しさん
NGNGという感じかな?
だから
>int a[100];
>int* p = a;
>size = sizeof(p);
sizeof(p)はsizeof(a)ではなくsizeof(int*)と同じになる。
0158デフォルトの名無しさん
NGNGint a[100], *p; とあったとき、aとpは全然別物。
似たような使い方ができるだけであって、特別に何かをしているわけじゃない。
0159デフォルトの名無しさん
NGNGclass 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デフォルトの名無しさん
NGNG0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNGfoo myfoo(); では、foo型のオブジェクトを返すmyfooという名前の関数の
宣言になってしまう。
0163159
NGNGなんか見たことの無い書き方で
何がどうなってるのか分からないんですが
普通に整形したらどういう感じになるんでしょうか…
0164デフォルトの名無しさん
NGNGconstructorでのmember/base classの初期化構文。
0165デフォルトの名無しさん
NGNGclass 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();
}
0166159
NGNGありがとうございます。
度々申し訳ないのですが、↓のような感じの書き方はできないんでしょうか?
慣れてないものでシンプルな書き方じゃないとよく分からないのです。
試したらエラーがでましたが、>>165とは意味が違ってきてしまうのでしょうか。
class hoge{
private:
int i;
int j;
foo myfoo;
bublic:
hoge();
}
hoge::hoge()
{
i=100;
j=200
myfoo(i,j);
{
0167デフォルトの名無しさん
NGNG意味が違うからエラーが出るに決まってんじゃン。
>>165が正しい書き方なのでこれを理解して覚えること。
メンバの初期化に引数つきコンストラクタを呼ぶにはこうするしかない。
メンバ初期設定リストで調べてみ。
0168デフォルトの名無しさん
NGNG検索語句も示されてるのに
知障か?
0169デフォルトの名無しさん
NGNG何度もいいますように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どうもうまくいかなくて行き詰ってしまったので助けてください><
#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デフォルトの名無しさん
NGNGvoid CalcTemp(float tempCel);
{
tempFahr = 9/5 * tempCel + 32 ;
}
じゃなくて、
void CalcTemp(float* tempCel)
{
tempFahr = 9/5 * tempCel + 32 ;
}
CalcTemp(tempCel);
じゃなくて、
CalcTemp(&tempCel);
0172デフォルトの名無しさん
NGNGusing 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デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG>>172さん
レスありがとうございます。起動までこぎつけることができました。感謝感激です!
ただ、実際に数字を入れてみると-1.07e+008みたいな感じになってしまいます。
これはどうしたら直せますか?ご教授お願いします。
0175デフォルトの名無しさん
NGNGstd::setiosflags( std::ios::fixed )
0176デフォルトの名無しさん
NGNGソースをもっとよく見直せ。いったい何を計算してるんだ?
cinから貰ったtempCel の値で tempFahr を求めるんだろうが。
0177デフォルトの名無しさん
NGNGレスありがとうございます。
float CalcTemp(float&);
float CalcTemp(float& tempCel)
に変えてみたのですが同じような結果になってしまいました。
根本的に勘違いしてるところがあると思うのでもしよろしければ
教えて頂けませんか?
0178デフォルトの名無しさん
NGNGcout << "Enter celcius Temperature ==> ";
cin >> tempCel;
tempFahr = CalcTemp( tempCel );
cout << tempCel << " Celcius Degree = " << tempFahr << " Degree Fahrenheit ";
0179デフォルトの名無しさん
NGNG> // new (&myfoo) foo(i, j); //こちらでもよい
よくねーよ。
0180デフォルトの名無しさん
NGNG理由は?
0181デフォルトの名無しさん
NGNGありがとうございます!!できました。
つまりcinで数値を入れた後に計算するようになってなかったのが
原因と理解しましたが合ってますか?
0182デフォルトの名無しさん
NGNGお前もしかしてplacement new構文を知らないんじゃないか?
もう一度よく勉強してみろ。
0183デフォルトの名無しさん
NGNGすでにデフォルトコンストラクタで構築されたmyfooが解体されずに
新たに配置newでコンストラクトしてる。
だと思う。
0184デフォルトの名無しさん
NGNGそれはおかしい。myfooのデフォルトコンストラクタはいつ呼ばれているというんだ。
0185デフォルトの名無しさん
NGNGhogeのコンストラクタが呼ばれる前だよ。
あるクラスのコンストラクタが呼ばれるときには、基底クラス・メンバの構築は完了してる。
0186デフォルトの名無しさん
NGNGこれやってみ。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);
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNGいくらで買ってくれますか?
0192デフォルトの名無しさん
NGNGfunction1とかfunction2と明示してやんないとダメみたいです。
0193デフォルトの名無しさん
NGNGそれは「使える」に入らないのか?
0194デフォルトの名無しさん
NGNG入らない。
struct C{
template<class T>
void apply(boost::function<T> fn){ fn(); } };
3行で書けるものがfunctionの引数に応じたapplyのオーバーロードを書かなあかん。
それによって悪い悪臭を放つ。
0195デフォルトの名無しさん
NGNGdelegateとして使うなら引数の型と個数は静的に決定されてるんだから
そんな屁理屈が出てこないはずなんだが。
0196164
NGNG0197194
NGNG漏れはおととい出直してくるわ。
0198デフォルトの名無しさん
NGNGアスキーに変換csvに出力するにはどうしたらいいでしょうか?
0199デフォルトの名無しさん
NGNGそんな仕様書じゃ作れません
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNGは
”!((a==1)&(b==2))”
でいいのでしょうか?
0202デフォルトの名無しさん
NGNGいいえ。駄目です。
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNG>>203
どうすればいいのでしょうか?
0205デフォルトの名無しさん
NGNG!((a == 1) && (b == 2))
(a == 1) && (b != 2)
ご注文はどっち?
0206デフォルトの名無しさん
NGNG!((a == 1) && (b == 2)) の方でした
&が二ついるんですねw
ありがとうございました
0207デフォルトの名無しさん
NGNG例えば、ファイルの先頭から12 byte目の情報を調べたい時です
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNGレスありがとうございます
seekについて調べてみたのですが使い方が載っていませんでした
よろしければ使い方も教えてください
0211デフォルトの名無しさん
NGNG「seek ファイル」で検索してみたのですがCのseekについては見つかりませんでした
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNGfseekでヒットしました
これから読んできます
ありがとうございました
0214フフフ
NGNGコマンドラインからDirectXのサンプルプログラムをコンパイル
したのですがコンパイルエラーが出てしまいます。
リンカの設定をしないとダメだと聞いたので
bcc.cfgファイルに
-I"C:\DX90SDK\Include"
-L"C:\DX90SDK\Lib"
ilink32.cfgファイルに
-L"C:\DX90SDK\Lib"
と追加したのですが
Fatal: オプションが必要 :LC:\DX90SDK\Lib
と、コンパイルエラーが出てしまいます。
どうしたらいいのか教えてください。
0215デフォルトの名無しさん
NGNGタダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/l50
0216デフォルトの名無しさん
NGNGどうすれば下3桁だけを比較できるのか全く検討がつきません。
どうすればいいか教えてくださいお願いします。
0217デフォルトの名無しさん
NGNGlong long int x;
x = 100100;
として
下三桁は x - x / 1000
0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG嘘
long long int tmp;
も宣言
tmp = x / 1000;
x - x * 1000;
0220216
NGNGがんばってみます。
0221デフォルトの名無しさん
NGNG何も考えないで書くとこんなのになるんですが・・・。
int x = 0x80000000;
int count = 0;
while (x) {
x >>= 1;
count++;
}
0222デフォルトの名無しさん
NGNGint count = sizeof(int)<<3;
それとも最大整数値?
int count = ~(1<<((sizeof(int)<<3)-1));
int型って32bitCPUと64bitCPUで有効桁数変わったっけ?(うろ覚え
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNG>>221のプログラムも見ずに聞き返すなよ
0225デフォルトの名無しさん
NGNGsizeof(int)*8
0226デフォルトの名無しさん
NGNGだな
0227221
NGNG>>221で言った有効桁数ってこういう意味でいっていました。
整数値 = 桁数
0x00000001 = 1
0x00000002 = 2
0x00000004 = 3
0x00000008 = 4
0x00000010 = 5
・・・
0x80000000 = 32
ようは立っているビットの最上位ビットの位置のことです。
言葉の使い方がわるかったです、スミマセン。
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNGint 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こんな感じの場合の配列aの個数です。
int i;
int a[] = {1,2,3,4};
for(i=0;i<aの配列の個数;i++){
}
0232デフォルトの名無しさん
NGNG#include<stdio.h>
main(){
int a[] = {1,2,3,4};
printf("%d\n",sizeof(a)/4);
return 0;
}
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNGあほか。アホか。阿呆か。
0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNG#define NUMOF( array ) ( sizeof( ( array ) ) / sizeof( ( array[ 0 ] ) ) )
なんていう糞マクロ見たっけなあ
0238231
NGNGΣ(゚Д゚;≡;゚д゚)
どれが一番ポピュラーな方法なんでしょうか??
こんな感じですか??
int i;
nt a[] = {1,2,3,4};
int size = sizeof (a)/sizeof(a[0]);
for(i=0;i<size;i++){
}
0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNG有名なマクロだよ。
Cでは良く使われるし糞とは言えない。
C++だったらテンプレートでやるべきだけど。
0241デフォルトの名無しさん
NGNG「べき」なんて言えないよ。
0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNGとかそういう話?
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNGテンプレートの話はひとまず置いておいたほうが混乱させなくてよいとおもうぞ。
インタプリンタ系言語だと、a.countとかa.indexみたいな感じで配列の要素数一発で調べられたりするからね。
初心者さんにはつまずきやすいところではあるな。
0247デフォルトの名無しさん
NGNGお前のレスのほうがよっぽど混乱させる文だな
0248デフォルトの名無しさん
NGNGそれは私が別スレで取り上げたのと同じやつ^^;
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デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNGそういう問題じゃないと何度(ry
0255デフォルトの名無しさん
NGNG#define max(n,m) (n > m ? n : m) ○
こんな初歩的ミス犯すような奴にマクロなど使えんわっ
0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNGそういう問題じゃないと何度(ry
0258デフォルトの名無しさん
NGNGあれが問題ではないとでもいうのかな?
0259231
NGNG当面、>>249さんのいわれるように、
その場その場でsizeof(array)/sizeof(array[0])を実行する
でやってこうとおもいます。
みなさま、どうもありがとうございました。
0260デフォルトの名無しさん
NGNG鵜呑みにするな!
0261デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNGでも、なれていない人がやるとバグの温床にならないかな
0263デフォルトの名無しさん
NGNGどうしてもマクロじゃないと出来ない!
マクロで書いた方がスッキリ!
な時以外使わないなあ
0265デフォルトの名無しさん
NGNGマクロは型情報などお構いなしだとかいった点で、
バグを追跡しにくくなるってのは昔から言われてることではあるけど、
その規模のマクロで追跡を困難にするほどの力はないと思う。
少なくとも「毎回書く」よりはマクロの方が上等な解決。
エラーメッセージが見やすいとかよりはまずソースの見易さを考えるべきで、
そのためには処理に名前をつけるってのは基本的なことがら。
というわけで私はマクロ賛成派。
結局は自分がやりやすいほうを選べばいい。どちらにもメリット・デメリットはある。
>>231氏はソース中に
sizeof(array)/sizeof(array[0])
と書かれてるのと
NUMOF( array )
と書かれているのとどっちが見やすいと思う?
0266デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNGどう考えても、sizeof(array)/sizeof(array[0]) のままの方がいいでしょ。
0269デフォルトの名無しさん
NGNGどう考えてもって・・・発想力弱いんじゃ?
0270デフォルトの名無しさん
NGNG配列サイズの計算できるんだ...なるほど
C言語だったらどうすればいいんだろ
0271デフォルトの名無しさん
NGNGできないでしょ(w
「配列」から「配列へのポインタ」に変数が変更されたりしたら、もうお手上げ。
コンパイルエラーが得られないのは相変わらず。
>>269
sizeof(a[])/sizeo(a[0])は、見るからに怪しいので、
メンテナンス時には誰もが注意を払ってくれる。
発想が弱いのは君だろ?認めろよ。
0272271
NGNGsizeof(a[])/sizeo(a[0])
↓
sizeof(a)/sizeo(a[0])
0273デフォルトの名無しさん
NGNG俺はケースバイケースだと思うんだけど。
0274デフォルトの名無しさん
NGNG> 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デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG関数でなくて構造体でしょ?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デフォルトの名無しさん
NGNGstruct 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デフォルトの名無しさん
NGNG0280275
NGNGありがとーございました。
ちまき…(・∀・)イイ!!
0281デフォルトの名無しさん
NGNG文字列は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先頭ポインタと要素数を渡すようにしたらええやん。
int CountNum(NUMDATA* p, int length)
0284デフォルトの名無しさん
NGNG0285デフォルトの名無しさん
NGNG非現実的
template<unsigned N> int CountNum(NUMDATA(& hoge)[N]);
0286デフォルトの名無しさん
NGNG環境設定処理を読み込み、環境設定情報を環境設定情報管理テーブルに
保持するとはどーゆーことですか?
プログラムを作る実習で初期化設定のモジュール作成
の担当になったのですが、何を作ればいいのかわからず、
困っています。
0287デフォルトの名無しさん
NGNG実行環境は?Linux?Windows?MacOSX?設定内容は?
0288デフォルトの名無しさん
NGNG0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNGそのプログラムではどんな初期化・設定が必要?
それがわからないと話にならないよ
0291デフォルトの名無しさん
NGNG0292デフォルトの名無しさん
NGNG保持する。
環境設定のフォーマットはあるんですが…
勤怠のプログラムを作ります
0293デフォルトの名無しさん
NGNG超漢字ユーザにはお薦めできるけど。
WindowsやLinuxなら他にもっといいものがある。
0294デフォルトの名無しさん
NGNG聞いていることとは違うんだけど、もういいわ。
例えば、
------------------------
key0=value0
key1=value1
key2=value2
------------------------
というような設定ファイルだとしたら、
これを一行ずつ読み込んで、1行目ではkey0,=,value0の様に部分部分に分けて、
(key0,value0),(key1,value1),(key2,value2)
というペアで
struct {
char* key;
int value;
};
のような構造体などに保存するということではないかな。
0295デフォルトの名無しさん
NGNG0296デフォルトの名無しさん
NGNGありがとうございます.
今一度仕様を読んだのですが、理解できず、
何からはじめたらいいのかもわからず、
講師にも聞いちゃいけないのでどーすることもできずに
止まってしまってます…
0297デフォルトの名無しさん
NGNG俺に恨みでもあるのか。それとも人をからかうのが好きなのか。
どちらにしても、お前は悪意をもって人を傷つけようとした。
こういう事はこれで最後にしろ。
0298デフォルトの名無しさん
NGNG移動します。
0299デフォルトの名無しさん
NGNGkey1=value1
key2=value2
って変数ですか?
0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG設定ファイルに書かれているテキスト。
0302デフォルトの名無しさん
NGNG>の担当になったのですが、
「もっと基本的な段階でまったく勉強せず、複数人での共同制作の段階になって
慌てて調べようとしたが、基礎が完全に抜け落ちていては何をどう調べたらよいの
か全く解らない」
ということでしょうか
0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNGまさしくその通りでございます
0305デフォルトの名無しさん
NGNGって無いでしょうか?ログ出力の際に関数名を出力したいので。
一応コンパイラはVC++6.0でお願いします。プラグマでもかまいません。
よろしくお願いします。
#でもプリプロセッサだから関数まで分らないだろうなぁ。。
0306デフォルトの名無しさん
NGNGBOOST_CURRENT_FUNCTION
0307306
NGNG0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNGありがとうございます。
VC以外で機会があったら使ってみます。
0310デフォルトの名無しさん
NGNGhttp://seclan.dll.jp/c99d/c99d07.htm#dt19990516
ただし今のVCでは無理だという罠。
0311デフォルトの名無しさん
NGNG0312デフォルトの名無しさん
NGNGやめとけ。今は、__FILE__と__LINE__で忍耐しとくべきだ。
せっかく作った機能も、いずれコンパイラの対応で必要なくなってしまう。
0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNGファイル名と行番号で出力しておき、外部ツールで関数名に展開すればいいんでない?
0317デフォルトの名無しさん
NGNGそれが一番、影響小・低開発コストだね。
0318デフォルトの名無しさん
NGNGboost::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デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNG0321318
NGNGint 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++;
0322318
NGNG>>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++;
0323320
NGNG0324デフォルトの名無しさん
NGNG0325318
NGNGboost配列なら出来そうですけど、それ以外の方法で可能なら、漏れも知りたいです。
0326デフォルトの名無しさん
NGNGmemcmpは一致か不一致かしか判定できない罠
0328320
NGNG素直にfor文でやります。すいません。
0329デフォルトの名無しさん
NGNG0330318
NGNGありがとうございます
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デフォルトの名無しさん
NGNGWindows系の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デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNGmain()のあるcppと外部クラスの定義のあるcppのどちらともでusing namespace std;をするのはとりあえずよくないみたいなことを聞いたのですが、理由がよくわかりません。
0334デフォルトの名無しさん
NGNG0335デフォルトの名無しさん
NGNG別にそんなことないよ。
書きたいのなら好きにusing書きなさい。
0336デフォルトの名無しさん
NGNG名前空間が違うと言う恩恵を拒否し、アナクロニズムに浸りたいと言うのでしたらどうぞご自由に。
0337デフォルトの名無しさん
NGNGあえてstd空間と衝突する名前を採用する挑戦的な関数・クラスを使わない限り、恩恵はない。
どこの世に、わざわざstdと衝突させたがる人がいると?
標準のC++は、建前が先行しすぎているきらいがある。
0338デフォルトの名無しさん
NGNG特にalgorithmなんかは
0339デフォルトの名無しさん
NGNG今まで経験ないし、今後もないと思う。
名前が重複したとしても、ほとんどの場合コンパイルエラーが出るだろ。
君は、algorithmと引数まで酷似するような凝った関数使ってるのかね?
0340デフォルトの名無しさん
NGNGfind()
0341デフォルトの名無しさん
NGNGしら無い間にバグが出来ちゃったりするのが怖いから避けるんだろが
馬鹿かお前は
0342333
NGNGusing namespace std;をつかわずにstd::cout見たいな記述をして、見た目にわかりやすくしているってことですかね?
もしかしてmain()のあるファイルでもusing namespace std;を使わないのが普通なんでしょうか?
0344デフォルトの名無しさん
NGNGcurses使ったことないんで外してるかもしれないですけど,
たぶん使う前に初期化関数とかを呼ばなければならないんじゃないでしょうか?
替わりに
#include <stdio.h>
int getchar(void);
でどうでしょ?
0345デフォルトの名無しさん
NGNG0346デフォルトの名無しさん
NGNGfind_if (list.begin (), list.end (), boost::lambda::bind (&obj::data, boost::lambda::_1) == "hoge");
0347デフォルトの名無しさん
NGNGwindows上で動くプログラムを作ろうかと思ってるのですが
参考になるお勧めな本を教えてくれませんか?
ソフトはVisualStudio2003を使ってます。(ソフトは関係ないと思うけど一応
0348デフォルトの名無しさん
NGNG他は知らないが俺はファイルの先頭でこういう具合にいちいち並べている。
using std::cout;
using std::cerr;
using std::endl;
using std::fstream;
0349デフォルトの名無しさん
NGNGなるほど、主によく使うものだけをnamespaceを使用しないで省略できるようにしておくのですね。。
参考になります。。。
0350デフォルトの名無しさん
NGNGいい方法だな。
そのへんの名前はかぶりそうにないし。
0351デフォルトの名無しさん
NGNGして、動かそうとしたんですが、表示されるのは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;
}
}
0352331
NGNG>>344
解答ありがとうございます。
残念ながら両方試してみましたがうまくいきませんでした。
今のところUNIX系OSを使う機会は無いので、
Windows系のC言語で学習を続けたいと思います。
0353デフォルトの名無しさん
NGNGArgument-Dependent-Lookup(ADL)使うともうちょっと幸せ。
find_if (list.begin (), list.end (), bind (&obj::data, boost::lambda::_1) == "hoge");
0354デフォルトの名無しさん
NGNGどのような不具合が起こったのか、詳細うpキボンヌ。
でなければ、>>339の言い分が間違っているとは言い難い。
特に>>341の体験談を聞きたいものだ。
0355デフォルトの名無しさん
NGNG0356デフォルトの名無しさん
NGNGこういうの?
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のはわからないことが多すぎるんで
具体的にどうゆうのが階乗プログラムか教えていただければ幸いです・・・
0358デフォルトの名無しさん
NGNG漏れは階乗プログラムなんて名詞知らないヘタレPGなんで
階乗を求めるプログラムを書いてみただけw
0359デフォルトの名無しさん
NGNGそうですか・・・何とか自力でしらべまくってみます・・
わざわざ夜分遅くにご教授ありがとうございましたー
0361デフォルトの名無しさん
NGNG無限ループ
0362デフォルトの名無しさん
NGNGだろ?
int
fact( int n )
{
if(n<=1) return 1;
return n*fact(n-1);
}
ぢゃねの?
※intでいいのか、とか、マイナスの場合どうすんの?とかがあるが
0363デフォルトの名無しさん
NGNGn! = 1 ... n == 0 のとき
終了条件無いとだめだって
0364デフォルトの名無しさん
NGNGn! = 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
0368366
NGNG再帰的定義だからといって、再帰がいいとは限らない
なんか、Efficient C++ を思い出しますなあ
(単一引数を取るinline再帰関数にリテラルを渡すことにより、
最適化によってはコンパイルタイムで計算されるというやつ)
0369デフォルトの名無しさん
NGNG不具合なんか起きるもんかね。起きるのがイヤだから回避策をとってるのに。
転ばぬ先の杖って言葉知ってる?
0370デフォルトの名無しさん
NGNGそれはstdと同じ名前の関数・クラスは作らない、暗黙ルール的な解決策って意味かな?
0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNGプゲラ
0373デフォルトの名無しさん
NGNG頭悪そう
0374デフォルトの名無しさん
NGNGttp://pukapuka.s1.x-beat.com/img-box/img20040920215205.lzh
0375デフォルトの名無しさん
NGNG自己解決しました。単なる写し間違いでした…orz
ちなみに下から5行目です。
×begIdx=line.find_first_not_of(delims,begIdx);
○begIdx=line.find_first_not_of(delims,endIdx);
0376デフォルトの名無しさん
NGNG> 5行目
> 5行目
> 5行目
> 5行目
0377デフォルトの名無しさん
NGNGなんだこいつ
0378デフォルトの名無しさん
NGNG0379デフォルトの名無しさん
NGNG{
virtual void func(const int& i) =0;
}
の、=0ってどういう意味があるんですか?
0380デフォルトの名無しさん
NGNGキーワード 純粋仮想関数
0381デフォルトの名無しさん
NGNGなぜですか?
0382デフォルトの名無しさん
NGNG0383Ruby >>>>>>>>>>>>> C++
NGNGなぜですか?
0384デフォルトの名無しさん
NGNGその友達は「C++は問題外」でなくて、本当は「C++は理解の外」って意味でしょう。
頭の悪い友達を持って、君は不幸ですね。
0385デフォルトの名無しさん
NGNGその子頭は確かに悪いんだけど、顔と体は最高なんです・・・
0386デフォルトの名無しさん
NGNGそうですか。人はそれぞれ取り柄があるので、その子の長所を最大限に
引き出す事を考えれば君は幸せになれるでしょう。
0387デフォルトの名無しさん
NGNG0388デフォルトの名無しさん
NGNGintが1280ビットほどあれば意味があるかも。ポインタのサイズ<<intのサイズでないと
だめだけど。
0389デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNG耳鼻科へ
0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNGclass A;
class B { A a; };
class A { B b; };
でいいのでしょうか?
0393デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNGclass B { A* a; };
class A { B* b; };
インスタンスをメンバにしたらコンパイルできない。
0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNGclass A, Bが互いに相手のインスタンスをメンバにしたら
無限循環が起きるだろうが。
要は、「自分の型へのポインタ」はメンバに出来るが
「自分の型のインスタンス」はメンバに出来ないってのと同じ。
0399デフォルトの名無しさん
NGNGC99で書いたソースの拡張子は一般的に.cなんでしょうか?
0400デフォルトの名無しさん
NGNG0402デフォルトの名無しさん
NGNGありえない
0403デフォルトの名無しさん
NGNG0404399
NGNGまじっすか
たぶんC++も実装することになると思うんで追加でお聞きしますけども
C99のライブラリヘッダとC++の<c.*>ヘッダって共用できなくないですか?
無理に共用させるとすればrestrictとかマクロで逃げるよりほかないとか…
0405デフォルトの名無しさん
NGNGおいおい。>>400はあからさまにネタだろうがよ。
それと普通のコンパイラに付属しているヘッダ類をみれば
わかると思うけど、たいていはマクロでC/C++の場合わけはしてる。
#ifdef __cplusplus
extern "C" {
#endif
最低限必要なのは↑みたいにリンケージにかかわるところとか、
名前空間の違い(Cの標準関数は名前空間stdに配置)を
吸収する部分くらいかと思う。
0406デフォルトの名無しさん
NGNGどうしてかわかりやすく説明していただきたいのですが。
0407デフォルトの名無しさん
NGNGポインターに格納するのはアドレスというただの数値だもんね。
0408デフォルトの名無しさん
NGNG未定義
0409デフォルトの名無しさん
NGNGx^=(y^=(x^=y))
0410デフォルトの名無しさん
NGNGああなるほどそういうことか!さんくす!
0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNGまた、変換する方法はありますか?
0413デフォルトの名無しさん
NGNG0414デフォルトの名無しさん
NGNGCStringのことかAnsiStringのことかはたまたstd::stringのことか
はっきりせんが(てか、質問するときは環境をちゃんと書け)。
char配列は組込み型でStringはクラス。
よって前者は環境に依存しないが後者は環境依存。
また後者はメンバ関数が用意されているので
String hoge = "hoge"; //const char* → String
char hogetta[5];
strcpy( hogetta, hoge.c_str() ): //String → char*
てな具合に相互変換できる。
0415デフォルトの名無しさん
NGNGすみません。stringはstd::stringの事だと思います(using namespace std;とやっていればstringはstd::stringになりますよね?)
char*→stringはそのままString型に代入、string→charはc_strを使えばいいんですね。
ありがとうございました。
0416デフォルトの名無しさん
NGNG「だと思います」「stringはstd::stringになり」「char*→stringはそのままString型に」
↑ここらへんがプログラムに向いて無さそう。
文系の人なんだろうか。
0417デフォルトの名無しさん
NGNG読み落としたりしないし、キャピタライズにもちゃんと注意する。
文系理系よりも頭の良し悪しの方が遥かに重要って、当たり前の話だな。
0418デフォルトの名無しさん
NGNGこの場合頭の善し悪しじゃねーだろ
単に>>412がプログラミングに向いていないというだけのこと
頭のいい、悪いはまた別問題
0419412
NGNG環境といわれてもstringにいくつか種類があるなんて知りませんでしたし。
すみませんでした。
0420デフォルトの名無しさん
NGNG0421デフォルトの名無しさん
NGNG0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNG複雑さの無いシンプルな知識を本とかネットのリファレンスで吸収しまくる
単純作業っぽい学習の時期で、人に訊くことなんて何も無いと思うんだけど・・・。
0424デフォルトの名無しさん
NGNGあまり勧められたものではない、となっているのかな?
hoge::ClassName object;
hoge::class_name object;
(hogeはnamespace)なんとなく大文字小文字ででこぼこするなぁ、と思ったもので。
非推奨スタイルならさっさと改めます。
std::系やboostなどは標準ないしそれに近いものとして例外とされるのかな。
0425デフォルトの名無しさん
NGNGJava系のhogeHogeという命名は結構使われてたりする
0426デフォルトの名無しさん
NGNG最初のコードすら実行できません。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デフォルトの名無しさん
NGNGbcc32.cfgにインクルードパスが設定されていない
ここ嫁
http://www.borland.co.jp/cppbuilder/freecompiler/faq/bccfaq4.html
0428デフォルトの名無しさん
NGNG”インクルードファイルやライブラリファイルの場所を指定したBCC32.CFGを作成しなければなりません。”
どういう意味でしょうか?マイコンピュータ→システムのプロパティ→詳細設定
→環境変数でPathを選んで編集、既存の変数値に;C:\Borland\Bcc55\Binを付け加えたのですが
それとは違うんですか?
0429デフォルトの名無しさん
NGNGその直後に書いてあるだろ
0430デフォルトの名無しさん
NGNGBCC32.CFGをどこにどうやって作るんですか?
0431デフォルトの名無しさん
NGNG0432デフォルトの名無しさん
NGNGURL張ってくれてありがとな。
けどむかつくぜ!
0433デフォルトの名無しさん
NGNG文章を読めないのが無能以外のなんだというのだ
0434デフォルトの名無しさん
NGNG嫌な奴だな
0435デフォルトの名無しさん
NGNGhttp://software.nikkeibp.co.jp/software/special/bcc_install/bcc_install.html
ひとを品定めするような書き方は良くないっすよ。
0436430
NGNG上手く実行出来ました。有難うございます。
わざわざ手数のかかることをしてもらってすみません。
”ひとを品定めするような書き方”ってどういう意味です?
0437デフォルトの名無しさん
NGNGおこちゃまなんだろうな、とは思う。
#げ、読点多くて頭悪そw
0438デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNG>>418 >単に>>412がプログラミングに向いていないというだけのこと
>>431 >ホームラン級の無能
>>437 >おこちゃまなんだろうな、とは思う。
この辺の書き込みは質問者の弱い立場を利用した中傷でしかないので、しない方がいいですよ。
(421さんの言う「手厚い歓迎」?)
まぁ、みなさんなんやかんやでよく答えてるのでエライとは思います。
番号上げた方ごめんなさい。
0440435,439
NGNG0441デフォルトの名無しさん
NGNGプログラムに向いてない人がプログラマになったら、不幸だとは思わないのか?
好きならいいじゃないかと思うかもしれないけど、本人だけの問題じゃないんだぞ。
0442デフォルトの名無しさん
NGNG全部に付けるのはめんどくさいんで、
紛らわしいものだけに付けます(自分は)
0443マイク ◆yrBrqfF1Ew
NGNGどんな問題だ?
0444434
NGNGわかるわけねーだろあほ。
何がおこちゃまだよ。俺は無能と言われたんだぞ。
目の前で言ったら殺されても仕方ないぐらいのことを言われてんだ。
黙ってられるかよ。俺の理解力が無くて教える気がなくなったんなら、
「これ以上簡単には教えようが無い」ぐらいの事を言って終わりにすれば
いいだろう。自尊心を傷つけられてなんで黙ってられるんだよ。
俺だって場所を考えて聞いてるんだ!
0445デフォルトの名無しさん
NGNGそれで開き直れるのも2chだからだな。
いや、それでもなんでも、馬鹿にする人間が居る代わり
回答してくれる人間も居るんだからそれでいいじゃん。
実生活じゃこうはいくまい。
0446デフォルトの名無しさん
NGNG聞かれる前に答えるが、私はリアルでも言いたいことは言って生きてきているよ。
0447デフォルトの名無しさん
NGNGいいたいこと言って生きてちゃだめだろ。
0448デフォルトの名無しさん
NGNGはっきり無能と指摘してくれるのもここならでは。
リアルでは誰もそんなことは言ってくれず、心の中で「こいつ無能だな」と思われるだけ。
これを機に自分を見直せ。
0449デフォルトの名無しさん
NGNGにっこり笑顔で「次の行に書いてあるよ」といいつつ青筋立ててしまいそうな未熟者の漏れ。
酒の席とか、本人の居ないところであいつは駄目だと上司/同僚に愚痴りそうだ。
0450デフォルトの名無しさん
NGNGうむ。
お前はそういうタイプだ。
0451434
NGNGふざけるな
0453デフォルトの名無しさん
NGNG0454デフォルトの名無しさん
NGNGhttp://www.vector.co.jp/soft/win95/prog/se149182.html
0455434
NGNG俺は頭悪くないから。手順がわからないから聞くのがどうして頭悪いんだよ。
嫌な奴ばっかだ
0456デフォルトの名無しさん
NGNG手順がわからなくて2chで聞くのが無能以外の何者だというんだ?
C/C++の仕様とかなら膨大すぎるからキーワードくらいのヒントは聞くのはしかたないし、
このスレの存在意義はそこにあると思うけど、
長くも無い説明文に堂々と書いてることを聞くってのは日本語がわかってないとしか思えんじゃないか。
0457デフォルトの名無しさん
NGNG自分の頭の悪さに気が付いてないって点で、既に頭が悪い。
将来悲惨だよな、お前。痛いよ。
0458デフォルトの名無しさん
NGNG人に聞かなくても独力で手順を調べる事はできるんです
それが出来ないあなたは、頭が悪くないとしてもやや頭が悪いといわざるを得ないでしょう。
0459デフォルトの名無しさん
NGNG「...お前、クスリやってるだろ?」
「や、やってねーよ」
みんな否定するんだよな
0460434
NGNG0461デフォルトの名無しさん
NGNG>>447
ワラタ
0462434
NGNG嫌な奴ばっかだ
もうええわ
0463デフォルトの名無しさん
NGNG手順がこと細かく書いてあるページを教えてもらってるのに、よく読まずに質問するから
無能と呼ばれるんだよ。
0464434
NGNG嫌な奴ばっかだ
もうええわ
0465デフォルトの名無しさん
NGNGあきらめろ。
質問するならもっと簡単なのにしとけ。
0466デフォルトの名無しさん
NGNGだな
0467デフォルトの名無しさん
NGNG嫌な奴ばっかだ
もうええわ
0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNG0470デフォルトの名無しさん
NGNG2chには、人を不快にするのが好きな人間が屯している。
だから一般の香具師は、それを無視できなければならん。
耐えるしかないんだ。わかったな。
わかったら次の質問をしろ。
0471デフォルトの名無しさん
NGNG雰囲気は各人の投稿の集約だが各人の投稿が雰囲気に影響されるのもまた事実だ。
人を不快にする発言が憚れる雰囲気を作って行きましょう。
0472デフォルトの名無しさん
NGNGdeleteとdelete[]の明確な違いってなんでしょう?
X *pX= new X[5];
delete pX;
ってやったらどうなんの?
もう一点。
それは処理系による違いってある?
0473デフォルトの名無しさん
NGNG>挿入子のオーバーロードは自動インラインである事が必要なのか?
なのでしょうか・・・・?
僕も同じところではまっています・・・・
よろしくお願いします。
0474デフォルトの名無しさん
NGNGpX[0]だけdeleteされて他は残る
0475デフォルトの名無しさん
NGNGg++だと
クラス外で定義してもエラーは出ないですね.
規格では?
ところで「自動インライン」って言うんですか? これ.
0476472
NGNGえ。。。
マジ!?
酷いな。。。
ありが�d。
0477デフォルトの名無しさん
NGNGコンパイル時にはエラーにならなかったりするので注意すべし。
不安だったらテストコード書いとけ。
ちょうどCマガ10月号にnew/deleteをオーバーライドして解放忘れがないかチェックするネタがあるぞ。
0478473
NGNGありがとうございます。
うーん、コンパイラオプションとかでしょうか・・・
VC.net2003で試しているんですが、エラーはきますorz
>自動インライン
インライン展開とかでしたっけ?
inlineキーワードつけないといけなかったんですよね、確か。違ったっけ。
0479デフォルトの名無しさん
NGNG俺様用語満載で胡散臭いな。
0480デフォルトの名無しさん
NGNGdeleteは非配列形式のnewで生成されたオブジェクトの削除。
delete[]は配列形式のnewで生成されたオブジェクトの削除。
> X *pX= new X[5];
> delete pX;
未定義。
もちろん処理系による違いは有り得るが、飽くまで未定義。
>>474はどっかの処理系においての一例と見るべき。
0481デフォルトの名無しさん
NGNG0482デフォルトの名無しさん
NGNG#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デフォルトの名無しさん
NGNGstruct hoge{
virtual void hogefunc(){}
}
ってやるのは virtual をインラインにしてるから良くないの?
struct hoge{
virtual void hogefunc();
}
void
hoge::hogefunc(){
}
ってやるべき??
0484デフォルトの名無しさん
NGNG展開できるところは展開されるかもしれないし、遅延束縛もちゃんと機能する。
0486デフォルトの名無しさん
NGNG1と-1の乱数が欲しかったので,rand()を使い
(rand() % 2) *2 -1
として,取り出しました。
本当に散らばっているか,100個くらい表示させてみたのですが,
何度やっても交互に並んでしまいました。
srand(time(NULL))と種を与えた場合も,与えない場合も結果が変わりませんでした。
2種類の数字をランダムに得る方法は何かありませんでしょうか?
0487デフォルトの名無しさん
NGNGrand() > RAND_MAX/2 ? 1: -1を試してみてくれ。
0488デフォルトの名無しさん
NGNG最下位ビットは必ず交互に変わるアルゴリズムなのだろう。
なので、上位の方のビットを使えばましになるはず。
0489デフォルトの名無しさん
NGNG#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教えていただいたようにしましたら,無事解決しました。
ありがとうございました。
# 教えていただいたことをヒントに少し調べてみましたら,
# Linuxのマニュアルには上位ビットを使うように,と書いてあるそうでした。
0491489
NGNG0492C++勉強中
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デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNGサンクス移動します。
0497486
NGNG大変失礼致しました。
新着レスを調べずに,実験およびレス書きを行ったため,
アドバイスをいただいていたことに気がつきませんでした。
私如きでは今見ただけではよくわからないのですが,
いつか役立たせていただきたいと思います。
0498デフォルトの名無しさん
NGNG今すぐにでも出来るよ
この辺でもご参考に
http://www.kmonos.net/alang/boost/
0499デフォルトの名無しさん
NGNG0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNG0502デフォルトの名無しさん
NGNGint n;
public:
Hoge(){ n = 1; }
int get(){ return n; }
};
int main(){
Hoge h;
return h.get();
}
こんな簡単なクラスでもget()を読んだ箇所の
アセンブラを見てみるとcallの字があるのですが、
これはたぶんインライン展開されて無いですよね?いやされてるんでしょうか。
0503デフォルトの名無しさん
NGNG0504502
NGNG書きこんだ瞬間に気づく悲しさ
0505デフォルトの名無しさん
NGNG0506デフォルトの名無しさん
NGNG無ければ自分で作る!
0507デフォルトの名無しさん
NGNGこれからいろいろ利用していくことを考えるとC++の方を重点的に勉強しておいたほうがいいような気がするんです。
将来はWindows用の本格的なアプリケーションも作っていきたいと考えているので、
VCの解説でよく使われるC++の方がいろいろ便利な気がします。
しかし、せっかくCの基本を覚えたんだから、それを深く学んでいく方がいいのかもしれません。
皆さんの意見を参考にしたいのですが、どっちの方がいいと思いますか?
0508デフォルトの名無しさん
NGNG将来的なことを考えたらC/C++以外の言語を習得したほうが良いかもしれん。
特にWindowsアプリの開発ならC++にこだわる必然性は無い。
ということを頭に入れた上で。
C++は純Cに比べて遥かに仕様が膨大で、その理解にはオブジェクト指向の
理解が不可欠。つまり習得するには非常に時間がかかる。
オレが勉強してたときはjavaなんて無い時代だから半ば必然的にC++の勉強したけど、
いまの若い人には正直あんまり勧める気はしない。
あ、Cの勉強は無駄にはならんぞ。
0509デフォルトの名無しさん
NGNG遅レスだけど、線形合同法による乱数生成だとそうなる。
最近のライブラリはMT(メルセンヌツイスト)導入したものも多いので、
そういうのならそんな性質はないので興味があったら調べてみるのも一興。
0510デフォルトの名無しさん
NGNG"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釣りか?
もしくは、スポーツ選手などと同様で40代前に引退する羽目になるのが嫌だから、
新規参入する若手を減らして競争率を下げたいのかwwwww?
>>507
今や、いきなりC++から入るべきだよ。
Cだけに触れるのは最初だけ。
C++のiostream系はほとんど覚える必要なし。というか時間の浪費。
ポインタ→構造体→自力リスト→自力クラス/MFC/STL→あとは人それぞれ
0512デフォルトの名無しさん
NGNG>ポインタ→構造体→自力リスト→自力クラス/MFC/STL→あとは人それぞれ
このレベルだと今時C++を使う意味は無いだろ。
0513デフォルトの名無しさん
NGNGT arr[N];
(&arr[N]-&arr[0])ここの結果っていつも「N」になるのが仕様なんですか?
要素数を求めるには最近までsizeof(T*)で割らなきゃあかんと思っていたんだけど違ったんだね。
スレの住人さん仕様なのかどうか?教えてYo。
一応環境はVC7.1、W2KですYo。
0514デフォルトの名無しさん
NGNG0515デフォルトの名無しさん
NGNG仕様ですよ。
sizeof(T*)で割るのは、最適化が期待できないコンパイラでも
定数の畳み込みを期待できるからです。
0516デフォルトの名無しさん
NGNGありがとう。スッキリしたYo。
そうか、俺の脳内仕様が古かったのね。
0517デフォルトの名無しさん
NGNG0518デフォルトの名無しさん
NGNG0519デフォルトの名無しさん
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;
}
0520519
NGNGvoid useFrag(){
bool flag = false;
for( int i=0; i < 10; ++i ){
if( array[i] == 8 ) flag = true;
}
if( ! frag ){
return;
}
printf( "処理を続ける" );
}
0521デフォルトの名無しさん
NGNGfor(;;) {
for( int i=0; i < size; ++i ) {
if( array[i] == 8 )
break; // ループから抜ける
}
// 処理
}
こう?
0522519
NGNGレスありがとうございます
しかしすいません、私の理解が足りないせいか、それだと
・配列に該当の対象(数字の8)が有っても無くても、処理が続いてしまう
・無限ループになってしまう(処理でもう一度breakするのでしょうか)
様に思えてしまって。
0523デフォルトの名無しさん
NGNGenumでするのがいいでしょうか?
それとも#defineでするのがいいのでしょうか?
#define ID_A 100
#define ID_B 200
enum {
ID_A = 100;
ID_B = 200;
}
どっちでやるか迷います
0524デフォルトの名無しさん
NGNG> しかしすいません、私の理解が足りないせいか、それだと
>>521の理解が足りないだけなので御気になさらずに
0525デフォルトの名無しさん
NGNGIDだったらenumの方が良い。
ちなみに、定数にdefineを使う場合があれば、なるべくconst intに置き換えるべき。
0527523
NGNGサンクスって書こうとしたらなぜか
間違った変換になりました
0529デフォルトの名無しさん
NGNGワロタ
さてはプロだな (界王様 風)
0530デフォルトの名無しさん
NGNGこれ、お前か?w
評価: 非常に良い 落札者です。評価者は mana_chiyo (819)
井上和香 DVD「和香物語」 美品( ^-^) (7月 3日 23時 0分)
出品者は「 非常に良い 」と落札者を評価しました。
コメント:商品が届き安心しました。この度は迅速な対応ウンコー!(゚∀゚)!ございました。
またの機会を楽しみにしています。 (7月 12日 18時 46分)
コメント:すみません。僕の辞書が勝手に変な変換をしてしまい、
不快感を与えるコメントをしてしまい大変申し訳ございません。
この度は迅速な対応ありがとうございました。 (7月 12日 19時 7分) (最新) [返答]
0531デフォルトの名無しさん
NGNGワラタ
0532デフォルトの名無しさん
NGNGYou are shine!
0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNGC++でクラスを作る方針としてクラスは小さい方がいいと聞いたんですが、
クラスごとにファイルを作るとすると、
ファイルがめちゃくちゃたくさんになってしまいます。
皆さんは1つのクラスごとにソースファイルとヘッダファイルを作っておられますか?
0535デフォルトの名無しさん
NGNGエレガントにか?
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<<' ';
}
0536535
NGNGCなら単純に
for(int i=0; i<10; ++i){
if(array[i]==8){
見つかった時の処理
break;
}
}
でしょ。間違ってshift+Enter押しちゃった。
0537デフォルトの名無しさん
NGNG作らない。
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/qid=1096270912/sr=1-1/ref=sr_1_18_1/249-7749404-9276354
この本読めばわかる。読まなくてもいいけど。
要するに自分がこのクラスとこのクラス(あるいは関数)は深く関連があるなと思えば一緒のヘッダで宣言するだけの話。
0538デフォルトの名無しさん
NGNG> 作らない。
即レス、ご教授感謝します。
関連があるクラスは一つにまとめるんですか。
(まとめすぎてヘッダファイルが大きくなってしまう場合は、どうなるんでしょうか)
この本は早速買ってきますw
0539519
NGNGなんだか今見返すと、嫌みっぽくて、すいませんでした。
本当に習いたてで、右も左も分からないだけですので…。
>>535-536
C/C++以前勉強してたのがBasic(VBではなく)だったので、
どうしてもGOTOによる流れが真っ先に念頭に浮かんでしまいました。
そのままifの条件文内で処理すれば良かったのですね。
STLも勉強してみます。レスありがとうございました。
0540デフォルトの名無しさん
NGNG{
public:
Derived() : Base() {} //これ
}
派生のコンストラクタに使うあの右の奴の事をなんて言うものですか。
コンストラクタ以外でも使えますか?
Derived() : Base::Init() {}
とか
0541デフォルトの名無しさん
NGNGに限らない
0542デフォルトの名無しさん
NGNGDerived() : Base(Base().Init()) {}
Derived() : {Base::Init()}
じゃいかんのか?
0543デフォルトの名無しさん
NGNGnamespace xx;
namespace xxx;
namespace xxxx;
namespace xxxxx;
namespace xxxxxx;
0544デフォルトの名無しさん
NGNG区別できるなら別に構わないと思います
0545デフォルトの名無しさん
NGNG5文字までなら許せるけど6文字以上からは毎回打つにはちとキツイし
0546デフォルトの名無しさん
NGNGint a; は宣言で
int a = 0; は定義?
0547デフォルトの名無しさん
NGNGググれやカス
0548デフォルトの名無しさん
NGNGマジレスすると宣言でつ
0549デフォルトの名無しさん
NGNG定義でもある宣言とか書いてあってよく分からないんです
0550デフォルトの名無しさん
NGNGa=0;
と同義w
0551デフォルトの名無しさん
NGNG0552デフォルトの名無しさん
NGNG変数の定義はないんですか?
0553デフォルトの名無しさん
NGNG0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNGない
0556デフォルトの名無しさん
NGNG定義というのは宣言に内包されているもの。
しかし、
type name(type、・・・);
extern type name;
struct(class) name;
こういう形のものは定義と呼ばれることはない。
0557デフォルトの名無しさん
NGNG宣言の後であればコンパイラはその名前の意味を認識することができる。
定義とは、宣言された名前に対応する本体の記述。
定義は、それが対応する名前を確実に知るために、必ず宣言を含んでいる。
0558デフォルトの名無しさん
NGNGclass 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デフォルトの名無しさん
NGNG2では所有関係の逆参照になってしまうので、それを嫌って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例外が問題なく使えるなら投げるのが正解。
事情があって例外を投げることができない場合の最善手は難しいが、
「それとも〜」以下の手法は有効だと思う。
戻り値を std::auto_ptr<Foo> にすると少し嬉しいかも。
0562デフォルトの名無しさん
NGNG配列を使うのが有効ですが、これを通常の関数の代わりにinline関数で
行うことって可能でしょうか?
もしくはgotoのジャンプ先を、ifやswitchなどの分岐数の増加で効率が落ちる
制御命令を使わずに、動的に変更する方法ってないでしょうか?
0563デフォルトの名無しさん
NGNG動的じゃないけどmap使うとか
あるいはこんなのとか
http://www.s34.co.jp/cpptechdoc/article/selforg/index.html
0564デフォルトの名無しさん
NGNGCreateProcessでコンソールプログラムを起動するときに、
リダイレクトの標準入力をしてする方法が分かりません。
標準出力に関するサンプルは多いのですが・・・
0565デフォルトの名無しさん
NGNGC++の話として進めると
インライン関数より関数オブジェクトの方がいいこといっぱいだYo。
ttp://www.s34.co.jp/cpptechdoc/article/selforg/index.html
0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNGだいたい標準出力と同じだよ。
ところどころ引数を気をつければ平気。
0568デフォルトの名無しさん
NGNGコピーコンストラクタはちょっと手間がかかりそうな気がしますが、
中括弧{}は便利ですね。switch文のcaseラベル内でも使えるし、
マクロでもまとめられるし何でも使えますね。
レスありがとうございました。
0569Addicted to C++ ◆nrBjarne.g
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1060403548_118/fvector.hpp
0570デフォルトの名無しさん
NGNG手短に目的などを
0571Addicted to C++ ◆nrBjarne.g
NGNGファイルをベクタみたいに使ってみたかったので、
同じインターフェイスにしてみました。
0572デフォルトの名無しさん
NGNG目的が良くわからん。
たんなるオブジェクトの永続化か、メモリに常駐できないような巨大なデータを扱うのかで
より良い実装方法があると思うんで。
キャッシュの持ち方やファイルアクセスの仕方あたりをポリシー化してみたらどうかね?
0573デフォルトの名無しさん
NGNGなんだかんだで断念する日々が続いております。
とか言うとネタみたいですが、実際皆さんconstをきちんと使ってるんでしょうか。
周りはなんか適当な人ばかりです。C++です。
0574デフォルトの名無しさん
NGNG適当な人との関わりはたった方がいいかもよ
0575デフォルトの名無しさん
NGNGだとすると>>573は自分とのかかわりを絶たなきゃならんわけだな。
0576デフォルトの名無しさん
NGNGその程度のプログラムだと、有効に使うことはできないよ。
0577デフォルトの名無しさん
NGNG自分は自分自身に対してはいつでも的確だよ。
0578573
NGNG最近はconstが無い言語も多いみたいなので、
こんなもんでもいいのかなと思ってました。
例えばメンバクラスを返すgetterがあった場合、
constと非constの両方用意した方が良いんでしょうか?
0579デフォルトの名無しさん
NGNGありがとうございます。疑問が晴れました。
0580デフォルトの名無しさん
NGNG・クラスの宣言内に。
・クラス宣言の外、その直後辺りに。
・どっちでもいい。
0582デフォルトの名無しさん
NGNG・クラス定義内に定義
・クラス定義内で宣言、クラス定義後に定義
・クラス定義内で宣言、別ファイルに定義してクラス定義後に #include
下に行くほど面倒になるのと引き換えに、
メンテナンス性などでメリットがある。
0583デフォルトの名無しさん
NGNG現状がそもそも検索の必要もなく普通の関数ポインタの配列で
オーダー(1)で分岐先を判別できてまして(分岐条件の変数が
そのままインデックスになってる)、呼び出し回数の多い場所
だったので効率化のためにinline展開したかったので、折角教えて
もらったんですが自分のケースには使えそうにないです(´゚ω゚`)
asmでjmpの配列を作るのが現状にジャストフィットなんですが、
かなり面倒だったので似たようなことがCでもできないかな〜と
思ったんですが、関数ポインタの配列や関数オブジェクトの配列以外では
飛び先を配列化する方法は無さそうですね。。。
どうもでした。
0584デフォルトの名無しさん
NGNGgccの拡張機能ならいけそう。
ttp://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
0585デフォルトの名無しさん
NGNGラベルのアドレスをポインタにできる。まさに今欲しい機能がそれっすよ。
gccだけなのかぁ。VCにも欲しい機能だった。
0586デフォルトの名無しさん
NGNG関数の辺値を配列のインデックスに合わせれば言いだけの話のような・・・・
0587デフォルトの名無しさん
NGNG0588564
NGNG0589デフォルトの名無しさん
NGNGSTARTUPINFO dwFlags STARTF_USESTDHANDLES hStdInput
パーツを教えてやるよ。あとは自分で考えな。
0591564
NGNGSECURITY_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);
0592564
NGNGどこを変更すればよろしいでしょうか?
昨日の朝からやっているんですが、どうにもだめな状態です。
ご指導お願いします。
0593デフォルトの名無しさん
NGNG0594デフォルトの名無しさん
NGNGまずはどこでコケてるか絞り込め。
戻り値を調べたり、場合によってはGetLastError()でエラー詳細を調べるとか。
最低限これくらいやれ。
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNG今更アセンブラを勉強中です。
VC6の混合モードを使ってみたところ、シンボル付きで大変分かりやすく
これなら俺にも理解できるぜわーい、なんて思ってたのですが、
考えてみるとRelease時は最適化等で、全く別のコードになりますよね。
Release時のものを、シンボル付きで見る方法は無いのでしょうか。
思いっきり環境依存の質問ですがお願いします。
0598デフォルトの名無しさん
NGNGおいおい、" < D:\\bbb.in"ってリダイレクトしちゃっているじゃないか。
0599デフォルトの名無しさん
NGNGDuplcateHandleとかdupあたりを調べてから出直して来い
0600デフォルトの名無しさん
NGNGVC6なら「プロジェクトの設定」の
C/C++タブ:
カテゴリ「一般」の「デバッグ情報」を「プログラムデータベースを使用」
リンクタブ:
カテゴリ「一般」の「デバッグ情報を出力する」をチェック
で Debug ビルドと同じように混合モードで見ることができる。
それか、
C/C++タブ:
カテゴリ「ファイルリスティング」の
「リスティングファイルタイプ」を「マシン語コードとソースを含む」
で、Release フォルダに生成される .cod ファイルを読む。
0602デフォルトの名無しさん
NGNGどちらが先でしょうか?
gcc3.2.4では前者の方が先のようですが何かできちんと定められています?
0603デフォルトの名無しさん
NGNG規格の3.6.3に記述がある。
ttp://www.kuzbass.ru/docs/isocpp/basic.html#basic.start.term
0604デフォルトの名無しさん
NGNG0605デフォルトの名無しさん
NGNG0x8000は何進数の数字なのでしょうか。
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デフォルトの名無しさん
NGNG0607デフォルトの名無しさん
NGNGそういえばそんなのがあった気がしました、どうもです
0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNG0610デフォルトの名無しさん
NGNGたんに初心者なだけ
0611デフォルトの名無しさん
NGNG0612デフォルトの名無しさん
NGNGVC++、BCC、GCC、いろいろ
0613デフォルトの名無しさん
NGNGファイル検索できるランチャ作ろうと思うんですけど何で作るか、何が作りやすいか教えてください。
一応候補はVBNET−c++−c−JAVA−です。
0614デフォルトの名無しさん
NGNGHSPがいいが、その中ならVB.NET
0615デフォルトの名無しさん
NGNGその中で>>613が良く知ってるもので。
0616564
NGNG// 起動するウィンドウの状態
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どうしてもradがいいならc++builderつかえ
0618デフォルトの名無しさん
NGNG0619デフォルトの名無しさん
NGNG【'D:\' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。】
と表示されてしまします。どなたか原因がわかる方いましたらお願いします。
0620デフォルトの名無しさん
NGNG全て正しく行ってないから。
0621デフォルトの名無しさん
NGNGD:\
というコマンドは存在しないから。
0622デフォルトの名無しさん
NGNGD:かcd /d D:\のどちらか。
0623デフォルトの名無しさん
NGNGパスに【c:\Borland\Bcc55\bin】追加済み。
システム環境変数『Path』設定済み(変数+;c:\Borland\Bcc55\bin)
bcc32.cfgファイル、ilink32.cfgファイル作成済み。
これでエラーです。
どなたか原因解明お願い致します。
0624デフォルトの名無しさん
NGNGbcc32
とだけ入力したあとでDOSの勉強しろ。
0625デフォルトの名無しさん
NGNGできました!
どうもお手数かけましてすいません。。
ありがとうございます。
0626デフォルトの名無しさん
NGNGと表示されてしまうんですが消せますか?
また消し方わかるかたいたらお願いします。
0627shige
NGNG0628デフォルトの名無しさん
NGNGWindows板かPC初心者板へどうぞ。
//help prompt
0629デフォルトの名無しさん
NGNGpublic:
A(int id): id_(id) {}
A(int id) { id_ = id; }//ダメ
~A() {};
void func() { id_++; } //ダメ
private:
const int id_; //<--
};
メンバ変数のconstというのはコンストラクタで初期化したあとは
一切変更できない、という理解で良いですか?
自分の読んでいる本ではメンバ変数のconstについて何も触れていなかったので。
0630デフォルトの名無しさん
NGNGそのとおり。
しかし、そんな本は読むだけ無駄。窓から捨てろ。
いや、これはマジな話。
入門書は定評のあるものを読んだ方が絶対に良いよ。
0631デフォルトの名無しさん
NGNGさもなければ、そもそも何故staticにしないのかと突っ込まれそうだ。
0632デフォルトの名無しさん
NGNG関数しか使わない)をWinで動かした計算結果と、*.cppおよび*.h
だけをUNIXに持ってきてgccでコンパイルして作った実行ファイル
をUNIXで動かした計算結果が全く異なるということが起こった
のですが、考えられる原因は何かありますでしょうか?
0633デフォルトの名無しさん
NGNG0634デフォルトの名無しさん
NGNGどんな計算をしてるのかも分からないんじゃ
特別何といいようもないような
0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNG0637629
NGNGありがとうございます。読んでいるのはEssential C++です。
メンバ関数のconstや、mutableメンバ変数については解説されていたのですが。
「書いていない」というのは自分の勘違いかもしれないです。
使い道としては、何らかのID番号とか、生まれたときに一度決まったら
そのオブジェクトが無くなるまで終生変わらない属性、人間で言えば性別とか、に付けるべき、ということですね?
>メンバをconstにするとなると、コンストラクタの充実が必要だな。
>さもなければ、そもそも何故staticにしないのかと突っ込まれそうだ。
すみません。この部分がよく分からないのです。
0638デフォルトの名無しさん
NGNGあー、Esseintial C++なら捨てる必要は無いわw
でも、こら、const変数の扱いなんか、読者は当然分かってるって
前提の本だからなぁ。
値は張るけど「プログラミング言語C++」は読んどいた方がいいよ。
constメンバ変数の役割についてはその理解でよいです。
static云々については俺も分からんw
0639デフォルトの名無しさん
NGNG俺は>>631ではないけれども、おそらくstaticについて>>631の意図する
ところは、「例えばコンストラクタのイニシャライザで定数を代入して
いたりすると、そのようにしたい時にはstatic constメンバにするのが
普通だろうという突っ込みを受けるだろう」ということだと思う。
>>629についてはconstのまま(static不要)でいいだろうと思うが。
0640デフォルトの名無しさん
NGNGありがとうございます。捨てる必要が無くてホッとしました。
プログラミング言語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にはしないだろう。
それは乱数生成関数の値が違うから。
0643デフォルトの名無しさん
NGNGつかてるやつも糞Ruby!!!!!!
Ruby >>>>>>>>>>>>>>>>>C++
Ruby!!!!!!!!!!!
Ruby >>>>>>>>>>>>>>>>>>>> Ruby!!!!!!!!!
Ruby!””””””””””””””””””###########3
0644デフォルトの名無しさん
NGNGC++なんて論外^^;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Ruby >>>>>>>>>>>>>>>>>>>> C++++++++
0645デフォルトの名無しさん
NGNG0646デフォルトの名無しさん
NGNGPerlはもうメンテされてmせん。
Ruby誇らしい出宇sね。
0647デフォルトの名無しさん
NGNG0648デフォルトの名無しさん
NGNGエスパー降臨!
0649デフォルトの名無しさん
NGNGint a[i]
はエラーがでるそうなのですが
配列のサイズに変数を指定する必要があるとき、エラーがでないように
する他の方法ってないのでしょうか?
変化するサイズの変化量を見越して多めにサイズとるしか方法はないのでしょうか?
iに5が代入されてるから定数と変わらないような気がするんですけど…
なんでなんだろう…
0650デフォルトの名無しさん
NGNGC99かmalloc
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG0653デフォルトの名無しさん
NGNG> はエラーがでるそうなのですが
せめて自分でコンパイルして確認してから質問に来てください。
0654デフォルトの名無しさん
NGNGしてから
int i=5;
std::vector<int> a(i);
0655デフォルトの名無しさん
NGNG実行環境に依存するエラー(ex:ファイルが存在しない)を通知する場合
・メソッドの戻り値としてエラーが発生した事を返す
・std::runtime_errorを投げる
・std::exceptionから自前の派生クラスを定義してそれを投げる
などが考えられますが、どれを使うべきでしょうか?
0656デフォルトの名無しさん
NGNGint i = 5;
int *a = new int[i];
delete [] a;
0657デフォルトの名無しさん
NGNG返り値で通知するか例外投げるかは設計次第だが、そこでなんで
・std::runtime_error派生の独自例外クラス
という選択肢がない?
0658デフォルトの名無しさん
NGNGいいんでないの?
ただ、コマンドパターンとかプロクシパターンとかの複雑な処理の中で、
中から呼び出し元に例外(エラー)を伝えるんだったら例外のほうがすっきり
する場合があるよね。
エラーするかしないかの二値しかない場合はエラーコードで。
エラーにバリエーションがあるけどコードで済む場合
(エラーの原因が渡したパラメータ*のみ*に依存する場合なんかね)もエラーコードで。
渡されたパラメータに依存しない(メモリ不足で継続不能とか)は例外で。
呼び出し元にエラーの詳細情報を送り付けたいときも例外で。
0659デフォルトの名無しさん
NGNG戻り値にエラーコード入れるのは違うと思う。
C 系言語は関数のシグネチャで戻り値に名前をつかられるようになってないので、
戻り値は出来るだけ関数から自然に想像できる値だけにして、
それ以外は例外か、最悪ポインタ渡しにしたほうがいいと思う。
0660デフォルトの名無しさん
NGNG0661デフォルトの名無しさん
NGNG0662デフォルトの名無しさん
NGNG0664デフォルトの名無しさん
NGNG調べてみます
>>651
調べてみます
>>652
iはいろいろな数字に変化するようにしたいので…
>>653
実際には構造体の配列変数でやってる時に”C2057定数式が必要です”というエラーがでまして
F1で調べて見ると簡単な例として>>649みたいな例が載ってたのでその例を元に質問をしてみました
実際には
struct a b[i]
みたいに使っててエラーがでました
>>654
調べてみます
>>656
調べてみます
レス下さった方々ありがとうございました
まだ初心者なので
皆さんのレスを参考に調べてわからないとこがありましたらまた質問するかもしれないので
その時もよろしくお願いします
0665デフォルトの名無しさん
NGNG他の箇所でvectorなどを使っている場合は、一貫性を示すために使う場合もある。
一貫性が重要。
0666デフォルトの名無しさん
NGNG0667デフォルトの名無しさん
NGNG0668デフォルトの名無しさん
NGNGそれが必要になった段階で個数が確定している状況ならnew、
そうでないならvectorだなぁ。
0669デフォルトの名無しさん
NGNG0670661
NGNGベリーサンクス!
vector の最大の利点は動的にサイズ拡張できる、ってことですかね?
VisualBasic の ReDim みたいな。
まだ勉強中なので >669 の言ってる意味がわかりません。スマソ
0671デフォルトの名無しさん
NGNGnewと違ってやりっぱなしでいい。
0672デフォルトの名無しさん
NGNG0673デフォルトの名無しさん
NGNG0675デフォルトの名無しさん
NGNG0676デフォルトの名無しさん
NGNG知ったかぶりして恥ずかしくないのかねぇ。
0677デフォルトの名無しさん
NGNGそれは前に実証済みだったと思うけれど…
0678デフォルトの名無しさん
NGNG0679デフォルトの名無しさん
NGNG生のポインタアクセスと同じ速さにしたければ
T *ptr = &vec[0];
みたいにポインタを取ってからポインタ演算して使う。
これも常識だけど。
0680デフォルトの名無しさん
NGNGなにか嫌なことでもあったのかな。
0681デフォルトの名無しさん
NGNG0682デフォルトの名無しさん
NGNGやっぱそうだよな。常識だよな。
0683デフォルトの名無しさん
NGNG[]使ったアクセススピードは大抵の場合、全く同じかほぼ同じぐらいのレベルだろ
と思って書き込む前にリロードしたら>>681 …?
測定:生配列 ポインタ 使用した時間 641
測定:すべてをポインタにした vector 使用した時間 1903
なんでこんなに違うんだ?
明らかにおかしくないか
0684デフォルトの名無しさん
NGNGVC7.1で、/O2付きSTLportだ。
>array:80.306[ms]
>vector:80.0303[ms]
だったぞ。全然かわらんではないか。
0685デフォルトの名無しさん
NGNGint *p = &vec[0];
int s = vec.size();
for(int i = 0; i < s ; ++i)
{
p[i] = x;
}
0686デフォルトの名無しさん
NGNGポインタ値にインデックスを加算する方が早いらしいね。
0687683
NGNG測定:生配列 ポインタ 使用した時間 641
測定:すべてをポインタにした vector 使用した時間 1903
の例とか見ても>>681のサイトは明らかにおかしいし、
大抵のコンパイラならvectorの実装を見てもそんなに遅くなる分けないし
0688デフォルトの名無しさん
NGNG0689デフォルトの名無しさん
NGNG0690デフォルトの名無しさん
NGNGvectorに関する勘違いの基本だな。
0691デフォルトの名無しさん
NGNG配列と比較しての、生成/破棄のコストを除いて。
あえて違いを挙げるとすれば、
classのメンバは必ずメモリ上に置かれるので
レジスタに割り付けられる可能性の高い生ポインタより
ベンチ上は若干遅くなる可能性はあるかもしれないけど。
0692デフォルトの名無しさん
NGNGをvectorを使って
std::vector<struct a> b(i);
と書き換えたのですが
0x7c941230 でハンドルされていない例外が発生しました : ユーザー設定のブレークポイント。
というエラーが実行中に出て
xmemory internal header (from <memory>)
のoperator delete(_Ptr);という行が表示されました
どうすればうまくいくのでしょうか?
0693デフォルトの名無しさん
NGNGうまく代入出来てないだけでは。
例えば、struct aのコビーコンストラクタとoperator=がうまく動いてないとか
0694デフォルトの名無しさん
NGNG初歩的なことですがC++で質問です(現在、C++言語の基礎を学習中)。
vectorを大まかに再現したクラスを作成中です。
そのデストラクタを作っているのですが、それぞれのデータ要素の
破棄をした後にメモリを解放するのはなぜでしょうか?
というより、メモリを解放してもデータ要素は残るものなのでしょうか?
ちなみに、<memory>ヘッダにあるallocatorクラスの、destroyとdeallocateを
つかっています。
0695デフォルトの名無しさん
NGNG構築されたデータは適切に解体されなければならない。
たとえばその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のデストラクタが呼ばれないから、このコードはメモリリークを起こす。
0696695
NGNG>alloc.construct(p);
>alloc.deallocate(p);
alloc.construct(g);
alloc.deallocate(g);
0697デフォルトの名無しさん
NGNGありがとうございました。
クラスを入れる場合、破棄しないとそのデストラクタがさぼってしまう
てことですよね。ということは逆に考えると、
(再利用性や現実味は置いといて)組み込み型のみを入れ、初期化を
ちゃんとするなら破棄はあってもなくても問題は起こらないのでしょうか?
連続質問すいません。コンストラクタむずい・・・。
0698デフォルトの名無しさん
NGNGその通り。
#include <cstdlib>
void f()
{
int *p = std::malloc(100 * sizeof(int));
/* ここでpをつかう */
std::free(p);
}
C言語ではこんな感じでよく使われる。(malloc/freeはallocator::allocate/deallocateに相当)
0699デフォルトの名無しさん
NGNGたぶん問題ないんじゃない?
C++でもmalloc/freeは使えるんだから。
0701デフォルトの名無しさん
NGNGオブジェクトの寿命と、オブジェクトを配置するメモリの寿命は分割し得るということ。
0702デフォルトの名無しさん
NGNG>>699
>>701
当たっててよかった・・。理解できてるようです。
本当にありがとうございました。もう、まっすぐに感謝です。
0703デフォルトの名無しさん
NGNGfloat x1,y1,x2,y2;
};
std::vector<struct a> b(20);
b[1].x1=10;
としてもb[1].x1に10が代入されてないのですけど
なぜでしょうか?
0704デフォルトの名無しさん
NGNG> b[1].x1に10が代入されてない
何を見てそう思ったの?
0705デフォルトの名無しさん
NGNGHDC 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代入と表示の間のコードはどうした?
なるべくソースを貼りたくない気持ちはわからんでもないが、
それじゃぁ何も知らない他人に教えてもらうことは期待できないぞ。
0707デフォルトの名無しさん
NGNG> wsprintf(szBuf, "%d", b[1].x1);
floatじゃなかったのか?
0708デフォルトの名無しさん
NGNG代入と表示の間のコードはこれだけなんですが…
b[1].x1=10;以降は配列bはいじってないです
0709デフォルトの名無しさん
NGNG>>707
struct a {
float x1,y1,x2,y2;
};
を
struct a {
int x1,y1,x2,y2;
};
にかえたらうまいこといきました
レスありがとうございました
それと、初歩的な質問なんですけど
なぜfloatだと0が表示されるんですか?
0710デフォルトの名無しさん
NGNG"%f"はfloat, double型を処理する。char, short, int, longを渡したときは何が起こるかわからない。
0711デフォルトの名無しさん
NGNG丁寧にご説明ありがとうございます
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デフォルトの名無しさん
NGNG0713デフォルトの名無しさん
NGNG0714デフォルトの名無しさん
NGNG>>713
即レスありがとうございます
早速
wsprintf(szBuf, "%d", b[1].x1);
を
sprintf(szBuf, "%d", b[1].x1);
に変更したところちゃんと表示されました
レスのために貴重な御時間をさいてくださってありがとうございました
0715デフォルトの名無しさん
NGNGこういうことを書かれても、ちょっと調べれば判ることを質問された後だけに
誠意の欠片も感じられない気がする恭子の頃。
0716デフォルトの名無しさん
NGNG0717デフォルトの名無しさん
NGNGfloat 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デフォルトの名無しさん
NGNGstd::stringstream foo;
foo.str("");
0719デフォルトの名無しさん
NGNG10.0 は doube。
10.0f が float。
0720デフォルトの名無しさん
NGNGおーそんなふうに使うのか
レスありがとうございますです
0721デフォルトの名無しさん
NGNG格上げされてから演算が行われる。
結果の格納先が単精度型だと、倍精度が単精度型に変換されるんで、
いちいち変換処理が入って無駄が多い。
どうしても単精度がよければ式に倍精度型が含まれないようにいちいち
気を配ってやらなきゃいけない。
データがでかすぎてメモリが足りなくて、かつこれ以上アルゴリズムの改善も
出来ないという場合でなければ、倍精度型を常用したほうがいいよ。
0722デフォルトの名無しさん
NGNGなるほど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デフォルトの名無しさん
NGNG0725723
NGNGstaticですか。試してみます。
しかし実は、この配列をプログラム内ではさらに構造体配列に
マップしようと思っています。そういうのはアリなんでしょうか。
sturct abc {
float xyz[3];
float col[4];
} *ddd;
のような構造体があったとき、
ddd = (struct abc *)array;
のようなことをしたいのです。本当はクラスをマップしたいのですが、
メンバ関数や継承データのことを考えると難しそうなので構造体にしました。
0726デフォルトの名無しさん
NGNG試してから言え
0727デフォルトの名無しさん
NGNGwinapp fatal error LNK1120: 外部参照 1 が未解決です。
このようなエラーが出てしまいます。初心者なのでどうやって解決していいか分かりません。
教えてください。
0728デフォルトの名無しさん
NGNG"_main が関数 _mainCRTStartup で参照されました。"の文をGoogleで検索してみな・・・
0729デフォルトの名無しさん
NGNGできたのですがデバッグで、このようにでました。
'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"必要な DBG ファイルが見つからないか、開けません。"をGoogleで
っていいかげんにしろコラ
0732デフォルトの名無しさん
NGNGやっぱりポインタを使ってvecterで管理するのが一般的ですよね?
でもポインタで管理するとリークの心配があるかなぁ?
ポインタで管理と実態で管理、どっちがC++ではいいのでしょうか?
ポインタを使わないでやった事ある人いませんか?
0733デフォルトの名無しさん
NGNGそのクラスがコピー不可orコピーにかかるコスト大ならポインタでやればよろし。
リークしたくないんならboost::shared_ptr使え。
0734デフォルトの名無しさん
NGNG0735デフォルトの名無しさん
NGNGどうもです。
作りとしてはこれでいいのですよね?↓
#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デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNGその目的なら、適切なコンストラクタを用意して、
DataVector.push_back(Data(100, 100));
DataVector.push_back(Data(200, 200));
DataVector.push_back(Data(300, 300));
でいいね。
0738デフォルトの名無しさん
NGNGやってみて言ってるのか?
0739デフォルトの名無しさん
NGNGData 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簡単に書けてRVOも効きそうだし
0741デフォルトの名無しさん
NGNGあ、すんません
あくまで例でして
データが入ったクラスをvecterで管理がしたいのです。
0742デフォルトの名無しさん
NGNG数値が少々と文字列
もしかしたらクラスも入るかもです。
0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNGインスタンスのメンバ関数を(上手く言えない・・・)呼び出させたいです。
例えば
#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出来ません。
普通の関数ポインタと、メンバ関数へのポインタは型が違います。
0746デフォルトの名無しさん
NGNG0747デフォルトの名無しさん
NGNGA *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糞みたいな質問と低レベルな会話ぷぷぷ
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> C++++++++++
0750デフォルトの名無しさん
NGNGCtest *pTest = new Ctest;
delete pTest;
という選択肢はないのかよ
0751デフォルトの名無しさん
NGNG0752デフォルトの名無しさん
NGNGclass CBasetest{
public:
virtual int test() = 0;
virtual ~CBasetest () {}
};
class Ctest : public CBasetest{
public:
int test(){return 0;}
};
ノイローゼ?
0753デフォルトの名無しさん
NGNGpublic:
class B {
};
};
のように(private,protectedでなく)publicにクラスをネストさせる意味とは何でしょうか?
0754デフォルトの名無しさん
NGNG入れ子クラスにすることで、その入れ子クラスが単体では無意味であることをユーザに暗示できる。
言い換えると依存関係をユーザに暗示できる。
VisualStudioなどのIDEでクラスビューのトップツリーにクラスが乱立するのを抑止できる。
0755デフォルトの名無しさん
NGNGclass A固有のインタフェースないしプロキシであるところのclass B
0756デフォルトの名無しさん
NGNGclass CBasetest {
virtual ~CBasetest()=0;
};
これで delete pBaseで各派生クラスのデストラクタが呼び出される。
基底クラスにはvirtualなデストラクタを用意するというのは基本中の基本。
しっかり覚えときや。
0757デフォルトの名無しさん
NGNG>748は
CBasetest *pBase = new Ctest;//1
delete pBase;//2
ってやってるからデストラクタを純粋仮想関数にするのはまずくないか?
class CBasetest {
virtual ~CBasetest(){ /* 処理 */ };
};
0758デフォルトの名無しさん
NGNGあっ、ホントだよ。デストラクタを純粋仮想にしてどうすんだよ。
空のデストラクタ用意しとかなまずいわな。
virtual ~CBasetest() { //中身なし };
酔っ払ってるとダメだなw
0759デフォルトの名無しさん
NGNG× { //中身なし };
○ { /*中身なし*/ };
もうねます。じゃねー。
0760デフォルトの名無しさん
NGNG{
public:
static int globalData;
};
グローバル変数代わりに使いたいんですが
ネームスペース使うだけで、外部参照を行うことってできないんですか?
CGlobal::globalData=10;みたいに他のファイルで操作したい。
エラーが起こったんですが、別の部分で間違ってる可能性もあるので。
0761デフォルトの名無しさん
NGNGエラーが起こったならエラーメッセージを貼れ。
一番的確な情報だ。
0762デフォルトの名無しさん
NGNGが。貼る事はできません。違うPCでネットしてるので。すいません。
externすればいいのかな。
0763デフォルトの名無しさん
NGNGclass 定義内での static データメンバに初期化子が無ければ、それは宣言だけになる。
初期化子をつけて同時に定義とするか、クラス定義外に static データメンバの定義を追加しる。
0764763
NGNG初期化子つけて同時に定義とできるのは、型が const 付きの整数か enum の時だけ。
>>760 は整数だけど const 付いてないから、初期化子つけて定義にはできない。
ってことで、
クラス定義外に static データメンバの定義を追加しる。
0765デフォルトの名無しさん
NGNG初期化忘れてました。
>>class定義内で...
でも、class定義内で初期化子つけて宣言ってできませんよね。?
初期化子つけないと定義されないというのは知らなかったです。
つけなきゃいけないってのは分かってた(つもり)でしたが...
ありがとうございました。
これで、extern無しでグローバルスコープだ。わぁい。
0767デフォルトの名無しさん
NGNG#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デフォルトの名無しさん
NGNGg++。VC6はダメダメだからC++の勉強には向かないYO。
0769デフォルトの名無しさん
NGNG0770デフォルトの名無しさん
NGNG0771デフォルトの名無しさん
NGNGデストラクタがprivateだったら誰も破棄できないやん。
staticなオブジェクトだって、プログラムが終了するときには
デストラクタが呼ばれるはずでしょ。
0772デフォルトの名無しさん
NGNG同じく、newするときもprivateだとエラーじゃなかったかな?
売る覚えスマソ。
0773デフォルトの名無しさん
NGNGprivate でもいけるように見える。
0774デフォルトの名無しさん
NGNG>デストラクタがprivateだったら誰も破棄できないやん。
自分のクラス内なら破棄できる。
0775デフォルトの名無しさん
NGNG仕様に詳しい人解説キボンヌ
0776デフォルトの名無しさん
NGNGdelete this;?
0777デフォルトの名無しさん
NGNGデストラクタがprivateでも同じクラスのメンバ関数内なら実体作れる。
0778デフォルトの名無しさん
NGNGクラスメソッドのGet〜()やSet〜()で引数の範囲チェックを行っていると速度的に不安になるのですが、
普通こういうのはReleaseビルド時にはチェックを行わないようにしちゃうものなのでしょうか?
0779デフォルトの名無しさん
NGNG0780デフォルトの名無しさん
NGNGということはみんな我慢してチェックしてるんですね、レスどうもでした
0781デフォルトの名無しさん
NGNG速度気になるなら範囲チェックしない版を用意するとか考えろや
デバッグ時とリリース時でコード変えたらデバッグの意味がねー
0782デフォルトの名無しさん
NGNGあっなるほど、呼び出し側でチェックするわけですか。
勉強になりますた(・∀・)
0783デフォルトの名無しさん
NGNG*
* *
* * *
* * * *
* * * * *
次は、上のような表示を行うプログラムです。空欄を埋めて完成せよ。
#include <stdio.h>
int main( void )
{
int i ,j;
for(i=1; i<=5;i++){
空欄
}
return 0;
}
0784デフォルトの名無しさん
NGNGputs("*\n**\n***\n****\n*****");
break;
0785783
NGNG*
* *
* * *
* * * *
* * * * *
でした。よろしくお願いします
0786デフォルトの名無しさん
NGNGputs(" *\n * *\n * * *\n * * * *\n* * * * *");
break;
0787デフォルトの名無しさん
NGNGパーツを教えてやるよ。あとは自分で考えな。
0788デフォルトの名無しさん
NGNG段々、空白が減ってるから
0789デフォルトの名無しさん
NGNG0790デフォルトの名無しさん
NGNGCであろうがVB、Java、Perl、Ruby、Pascalであろうが関係ない。
よって、スレ違いかと思われる。
0791デフォルトの名無しさん
NGNG0792デフォルトの名無しさん
NGNGint count=10;
{
int i=0;
for(; i<count; ++i){
printf("% *s",count-i,"");
int j=i+1;
for(; j>0; --j)
printf("*");
puts("");
}
0793デフォルトの名無しさん
NGNGint i, jだけでやらなきゃ駄目なんじゃね?
0794デフォルトの名無しさん
NGNGADOを勉強しないことには進まない、位まで行き詰まってます
適切なスレ、掲示板、サイト等
いい所がありましたら、案内をお願いします
0795デフォルトの名無しさん
NGNGint i=0,j=10;
for(; i<j; ++i)
printf("% *c%s\n",j-i,' ',&("**********"[(j-i-1)*2]));
0796デフォルトの名無しさん
NGNGRuby >>>>>>>>>>>>>>>>>>>>> CCCCCCCCCCCCCC+++++++
0797デフォルトの名無しさん
NGNG#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デフォルトの名無しさん
NGNG0799デフォルトの名無しさん
NGNG↓じゃないの?
#gcc -o subprogram main.o test1.o test2.o
0800デフォルトの名無しさん
NGNGmain.oは後からくっつけたいのです。
test1.oとtest2.oだけをくっつけたオブジェクトを作成し、
その後、作成したオブジェクトとmain.oをくっつけたい訳です。
0801デフォルトの名無しさん
NGNGfor( int i = ...; ...; ... ){ ... }
のように、for 内で int i のように変数宣言するのは大丈夫でしょうか?
0802デフォルトの名無しさん
NGNGC99なら。
0803デフォルトの名無しさん
NGNG何故くっつけたいのか聞かせてもらおうか。
#答は既に>798にあることだし。
0804デフォルトの名無しさん
NGNG<質問内容>
リストビューのアイテム毎の背景色変更についてです。
*カスタムドローにて、【猫でもわかる〜】に記載されている
処理は実現できました。
ttp://www.kumei.ne.jp/c_lang/sdk3/sdk_261.htm
応用として、一定時間毎にリストビューのアイテムが
上から順々に背景色を変更していく処理を実現したいのですが、
散々悩んだ挙句、できませんでした。
何卒、ご教授お願いいたします。
<開発環境>
OS : Windows XP
VC : VC++ 6.0 SDK ダイアログベースアプリ
0805デフォルトの名無しさん
NGNG0806デフォルトの名無しさん
NGNGYes! Yes! Yes!
0807デフォルトの名無しさん
NGNGタイマー使ってできないのー?
0808デフォルトの名無しさん
NGNGレスありがとうございます
関数に引数として渡す時はどういう時なんでしょうか?
グローバル変数化してしまえば引数として渡す必要がなくなると思うんですが…
0809デフォルトの名無しさん
NGNG管理ができない・難しいという罠に陥る
コーディングという面から言うなら再帰だのが使えなくなる
0810デフォルトの名無しさん
NGNG目から鱗が落ちました
お返事ありがとうございました
0811デフォルトの名無しさん
NGNGCの構造体をC+のクラスになおしたいときのこつって
何かありますか?
0812デフォルトの名無しさん
NGNGそのまま何もしなくていい
0813デフォルトの名無しさん
NGNGを先頭の行に書かなきゃ
0814812
NGNG0815デフォルトの名無しさん
NGNG単純にclassに書き換えるとアクセス制御がprivateになるけど、
structのままなら関係なし。
0816デフォルトの名無しさん
NGNG0817デフォルトの名無しさん
NGNG0818デフォルトの名無しさん
NGNG初心者歓迎のスレじゃないのかよ〜
ぬるぽ
0819デフォルトの名無しさん
NGNG「ファイル操作」とかじゃなく、もちっと具体的に書けや。
0820アイナブリッジ代理人
NGNGファイルのヘッダなどのバイト列をstructの構造体で読み出してるのだけど
C++に変更した時はCでの手順でまずいことありますか?
0821デフォルトの名無しさん
NGNG0822アイナブリッジ代理人
NGNGそうなんですか。thx。
0823アイナブリッジ代理人
NGNG0824デフォルトの名無しさん
NGNG可能でしょうか?
(DOSならばエスケープシーケンスを使って出来そうなのですが)
環境 2000+VC6です。
0825デフォルトの名無しさん
NGNG0826デフォルトの名無しさん
NGNG0827デフォルトの名無しさん
NGNGプログラムの大まかなイメージができあがるまで
手は動かさないで頭の中で考えてる時間がすごく長い
こんなのでいいのかな?
一日20行程度しか進まないw
0828デフォルトの名無しさん
NGNG0829デフォルトの名無しさん
NGNGプログラム組む方がどんなプログラムを作りたいか考えるより
楽しい(という表現で正しいかは不明)のだがそんな私は
逝ってよし?
0830デフォルトの名無しさん
NGNG0831デフォルトの名無しさん
NGNG0832デフォルトの名無しさん
NGNGあなたはゲーム脳脳だな
0833デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
NGNG0835デフォルトの名無しさん
NGNG0836デフォルトの名無しさん
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デフォルトの名無しさん
NGNG0838デフォルトの名無しさん
NGNGSir!Negative, Sir!
0839デフォルトの名無しさん
NGNGやり方が分かりません。具体的にどうすれば良いのでしょうか?
0840デフォルトの名無しさん
NGNG0841デフォルトの名無しさん
NGNG追加すれば良いのでしょうか?
0842デフォルトの名無しさん
NGNG0843デフォルトの名無しさん
NGNGwstringにchar*やstringの定義が見つからないのですが‥‥
mbstowcsなどを使用して変換するしか方法はないのでしょうか?
とりあえずstd::wstring = WideString(std::string.c_str()).c_bstr();でお茶を濁しているのですが。
(WideStringはVCL用のワイド文字列クラス)
0844デフォルトの名無しさん
NGNGどのようにすればいいのでしょうか?
ご存知の方いらっしゃいましたら、教えてください。
参考になるHPを教えていただけるだけでも構いませんので、よろしくお願いします。
OS:windows2000
言語:C言語(C+ではない)
コンパイラ:VC6.0
0845デフォルトの名無しさん
NGNG割と最近そっくりな質問をどっかで見たな・・・。
C++関連のスレだった気がするので探してみると良い。
use_facet で codecvt 取得して・・後忘れた。
0846デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1095583235/l50
ここの141や177を嫁。
0847845
NGNG0849デフォルトの名無しさん
NGNG0850デフォルトの名無しさん
NGNGと検索せずに言ってみる
0851デフォルトの名無しさん
NGNG0852デフォルトの名無しさん
NGNGAllocConsole()してそこでやれ
0853デフォルトの名無しさん
NGNGpimplイディオムというものを見かけたのですが、これって一般的/頻繁に使われているのですか?
0854デフォルトの名無しさん
NGNGヘッダの依存関係が爆発してひどい目に遭ったC++プログラマなら大抵知ってる。
後付けで対応する手段としては手軽で効果が大きい。
最初から問題になるのが分かっていれば、
仮想関数と継承を使うようにしたほうがすっきりする。
0855デフォルトの名無しさん
NGNGどうやら理解してない者がいるようだ。
0856デフォルトの名無しさん
NGNG0857デフォルトの名無しさん
NGNGポインタ+=3とかでも、3ポインタ分進むことは保証されてましたよね?
確かめてもちゃんと3つ分進んでますが、なんか急に不安になってきて。
0858デフォルトの名無しさん
NGNG0859デフォルトの名無しさん
NGNG昔これで失敗した気がしてねぇ
というかポインタを飛ばして進ませる事は滅多に無くて
0860デフォルトの名無しさん
NGNGそれは配列をポリモフィズム的に扱っちゃったりするときのことじゃないの」?
0861デフォルトの名無しさん
NGNGあーそうです配列絡みでした
レスありがとうございました、一安心
0862デフォルトの名無しさん
NGNGCマガでも読んでろ。
プラグラのいってることの意味がわかってきたら中級入りだ。
0863デフォルトの名無しさん
NGNGあ〜、それ自分もあったわ。
結局配列じゃなくポインタ配列で回避したけど。
0864デフォルトの名無しさん
NGNGコールバックを引数に取る関数にメンバ関数のポインタを渡したいのですが
たとえばWindowsのウィンドウプロシージャなら
インスタンスのthisポインタを仕込んでおいたりできるんですが、
そういう真似ができない場合の汎用的な解決方法とかはあるんでしょうか
0865ぬるぽ
NGNG0866デフォルトの名無しさん
NGNGEnumWindowsやスレッドのようにユーザー定義引数が存在する場合はそこにオブジェクトのポインタをつっこんでreinterpret_cast<>
0867デフォルトの名無しさん
NGNG最近オブジェクト指向(C++)に手を出している、C言語中級者です。
クラスのメンバ関数に触れたとき、
ふと関数ポインタという言葉を思い出しました。
実際関数ポインタというものを使いこなしているわけではないのですが、
関数ポインタという名前で想像できる通りの機能と解釈しています
(ここも指摘があればよろしくお願いします)
概念的には似たようなものなのでしょうか?
例え異なるとしても、この関数ポインタを利用すれば疑似メンバ関数のようになるのでしょうか?
あくまで知的探究心によるものですが、ご教授よろしくお願いします。
0868デフォルトの名無しさん
NGNG実装的には、仮想関数など関数ポインタを使ってるわけですが、
概念的には別の範疇に属するものです。
なんつうか、Cからの移行組はオブジェクト指向を学習するのに
何かにつけ実装レベルの発想で理解しようとしますが、
それはあんまり良くないですよ。
むかし、前橋氏は(ry
0869デフォルトの名無しさん
NGNGあくまで実装面だけどね。
0870デフォルトの名無しさん
NGNG責任は持たんけど。
0871デフォルトの名無しさん
NGNG返答ありがとうございます。
>概念的には別の範疇に属するものです。
そうですか…
現在パーツを作って組み合わせていく設計を極力用いて
C++でソースを書いたりしているのですが
オブジェクト指向を理解しているのか、
それともただの真似事でぜんぜん理解していないのか、自分では全く判断できず…^^;
>Cからの移行組は〜(中略)〜それはあんまり良くないですよ。
了解です。以後、念頭において学んでいきます。
>>869,870
早速参考させていただきます。
ありがとうございました。
0872デフォルトの名無しさん
NGNG推奨されるということですが、staticな外部変数のままだと、
具体的に問題が生じたりするのでしょうか?
0873デフォルトの名無しさん
NGNGそれは「staticにはいろんな意味があって紛らわしいから」
ということでしかない。
0874デフォルトの名無しさん
NGNG本格的に知りたければこれを読めばいい
http://www.amazon.co.jp/exec/obidos/ASIN/0201834545
0875デフォルトの名無しさん
NGNG例えば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++辺りを読んで目から鱗を落とせばよろしい。
0876875
NGNG>void getBar() {return Bar;}
>void getBaz() {return Baz;}
はそれぞれ
int getBar() {return Bar;}
double getBaz() {return Baz;}
の間違い。
なお、constは敢えて省いたがきちんと書くならこうなる。
int getBar() const {return Bar;}
0877デフォルトの名無しさん
NGNGエラい人、教えてください
0878デフォルトの名無しさん
NGNG0879デフォルトの名無しさん
NGNGそれで>>877が分かる人だったら
こんな質問しないでしょ?
もうちょっと考えろよ
0880デフォルトの名無しさん
NGNG0881デフォルトの名無しさん
NGNG仰るとおり、継承を考えず、という方法ならそれなりに実現できるかと思ったわけですが、
どうも安直に考えすぎてたようで、
メンバ変数とメンバ関数のパッケージングされたものを実現する方法が思い浮かびませんでした^^;
例えば
typedef struct _foo{
int Bar;
void (*BarSet)( int bar );
}Foo;
のようにパッケージングした上で bar の値を Bar へ代入することは可能なのでしょうか?
C++のレベルはまだまだなのですが、細かいことが好きな性分なため(?)、
C言語びいきで、C言語にこだわってしまいまして…^^;
助言よろしくお願いします。
>>877
邪道かもしれませんが system 関数はどうでしょう?
0882デフォルトの名無しさん
NGNG結論から言う。
C/C++の規格にはそのような操作は含まれていない。
0883デフォルトの名無しさん
NGNGそれで>>877が分かる人だったら
こんな質問しないでしょ?
もうちょっと考えろよ
0884デフォルトの名無しさん
NGNG偉そうに規格云々の話持ち出すなら
C言語またはC++言語には`操作'なんて含まれていない
0885デフォルトの名無しさん
NGNG>>877=883じゃないならお前が答えてやると良さそう
0886デフォルトの名無しさん
NGNGディレクトリの作成や削除→_mkdir(), _rmdir()
ファイルの削除→remove()
0887デフォルトの名無しさん
NGNGディレクトリの削除→boost::filesystem::remove, remove_all
ファイルの削除→boost::filesystem::remove, remove_all
0888デフォルトの名無しさん
NGNGディレクトリの作成→MakeSureDirectoryPathExists
ディレクトリの削除→RemoveDirectory
ファイルの削除→DeleteFile
0889デフォルトの名無しさん
NGNGお前みたいなクズ二度と顔を見せるな。
0890デフォルトの名無しさん
NGNG0891デフォルトの名無しさん
NGNG基本的なことですいませんが、ワイドキャラクタ用の関数群ってありますよね。これらは
どんな局面で使うのでしょうか? 「世界にはばたく」ソースを書くためには、これらの関数
を積極的に使おう、という雰囲気なのか?? よろしく m(_ _)m。
0892デフォルトの名無しさん
NGNGあなたには必要の無い物です
0893877
NGNG皆さんどうもありがとうござました。
>>885
>>883じゃないです。
>>886
多謝
>>888
ぐぐるとVCでのやり方は結構ヒットするんですけど、移植性の高い方法が見つからなかったもので
>>890
じゃないです
0894デフォルトの名無しさん
NGNG実際のところboost::filesystemが一番移植性が高いんじゃないか。
そもそもファイル操作というものが存在しない環境もあるわけで、
CとC++自体は規格としてディレクトリという概念やファイルの削除
という概念を含んでいない。当然移植性のある標準的な操作も
存在しない。boost::filesystemについて調べてみるといい。
Boost: http://www.boost.org/
0895デフォルトの名無しさん
NGNG0896887 != 878
NGNG???
0897デフォルトの名無しさん
NGNG0898デフォルトの名無しさん
NGNG俺はお前みたいなヤツが一番嫌いだ。
0899デフォルトの名無しさん
NGNG俺に恨みでもあるのか。それとも人をからかうのが好きなのか。
どちらにしても、お前は悪意をもって人を傷つけようとした。
こういう事はこれで最後にしろ。
0900デフォルトの名無しさん
NGNGremoveは標準ですが何か
0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNGディレクトリの区切り文字が '/' になってややこすぃ。
"C:\Windows\system" は "C://Windows/system" とか。
うっかりネイティブ形式の放り込むと例外が飛んでくるんで注意!
でもディレクトリ移動が '/' 演算死を使って実装してあるのはちょっと感動した。
0903デフォルトの名無しさん
NGNG標準関数として存在はしているが、
規格上はremoveはファイルを削除するように規定されてはいない。
そういう意味では>>894が正解。
あげあし取りでスマソ。
とりあえず参考ページ
http://www.bohyoh.com/CandCPP/C/Library/remove.html
実質的にはファイルの削除だ罠
0904デフォルトの名無しさん
NGNGだから何?remove使って何か問題あるのかね?
0905デフォルトの名無しさん
NGNGっつかWindows(DOS)って何でディレクトリの区切り文字を'\'にしたの?
ディレクトリはUNIXから拝借したんじゃないの?
0906デフォルトの名無しさん
NGNG悪いオーバーロードの典型だな。
0907デフォルトの名無しさん
NGNGから来ました。
spawnlの使い方もしくは、外部のプログラムを実行して、そのプロセスを終了させないで、制御を元のプログラムに戻す方法を教えてください。
spawnl(_P_NOWAIT , "パス + 実行ファイル名" , "NULL");
としてもうまくいかず強制終了されてしまいます。
0908デフォルトの名無しさん
NGNGなんで環境かかないかな
0909デフォルトの名無しさん
NGNGオプションが'/'で始まる仕様だったから。
ファイルの概念の無い環境は知らんが、BTRONにはディレクトリの概念は無いよね。
#いやさ、リンクで擬似的に実現できるんだけど".."がお手上げでね。
0910デフォルトの名無しさん
NGNG誘導したの漏れだけど、黙って移動するかな。おまけにこっちで環境書かないし。
で、改めて言うけどLSI-Cはやめとけ。ロングファイル名にも対応できないんだから。
0911デフォルトの名無しさん
NGNGほぅ
そこのボタンの掛け違いはいつ起こったんですか?
ご存知の方いるかな?
0912デフォルトの名無しさん
NGNGこのconstってどういう意味?
0913デフォルトの名無しさん
NGNG元々MS-DOSはUNIXじゃなくてCP/Mの真似だから。
つか、最初はディレクトリもなかったしな。
0914デフォルトの名無しさん
NGNG0915デフォルトの名無しさん
NGNGCP/Mってオプションはやっぱ'/'だったんですかね?
0916デフォルトの名無しさん
NGNG「getBarではメンバ変数(Barとか)に変更を加えない」という宣言
0917907
NGNG以後気をつけます。
環境はボーランドのコンパイラです。
0918デフォルトの名無しさん
NGNGおお、ありがと!
0919デフォルトの名無しさん
NGNGCP-Mならよかったんだけどねぇ。
0920デフォルトの名無しさん
NGNG調べても出てきませんでした
0921デフォルトの名無しさん
NGNG自前で関数用意するしかないですか?
0922デフォルトの名無しさん
NGNGint型でいいならabs()関数
あとはMSDN見ればわかるだろう。
0923デフォルトの名無しさん
NGNGMSDN使っていると言う前提は如何な最中。
>>921
「変換できるか」の定義に拠るが、strtod()を使えば文字列のどこまでを変換に使ったかは判る。
>>920
そういう演算子は無い。
0924デフォルトの名無しさん
NGNGそういう関数でやれ。
<cstdlib>
int:abs
long:labs
long long:llabs
<cmath>
double:fabs
float:fabsf
long double:fabsl
0925デフォルトの名無しさん
NGNG>>923
>>924
お返事ありがとうございます
abs()関数を使ってみます
0926デフォルトの名無しさん
NGNGすいません、今携帯でかつ調べる手段がないのでその関数の詳細教えていただけますか?
因みに基準は文字列が数字とピリオド1つで構成されているかです。
0927デフォルトの名無しさん
NGNGこれなら携帯でも調べられるだろ。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtod.3.html
0928デフォルトの名無しさん
NGNG927
解決しました。ありがとうございます。
0929デフォルトの名無しさん
NGNG情報が少なすぎで困っています。
0930デフォルトの名無しさん
NGNGいろいろな例をみていると1つしか指定できないみたいなので
(x、y)を戻り値として返すことはできるのでしょうか?
0931デフォルトの名無しさん
NGNGor
class Point {
int x_, y_;
//blah, blah, blah
};
Point hoge();
0932デフォルトの名無しさん
NGNG0933デフォルトの名無しさん
NGNGC++だったら>>932がスマートだと思う。
Cだったら>>931の2つかグローバル変数しか方法はなさそう。
classじゃなくてstructしか使えないけど。
古いコンパイラだと構造体の実体は返せないので注意。
0934デフォルトの名無しさん
NGNG>void hoge(int *x, int *y);
この方法は何という名の方法なんでしょうか
わからないので検索して調べてみたいのですが
なんて調べたらいいのかわからないもので…
>>932
調べてみます
>>933
c++.netなんですけどreturnで構造体をかえせるか試してみます
レスありがとうございました
0935デフォルトの名無しさん
NGNG回転とかシフトなどビット単位で計算することってC++やCではよくあると思うのですが。
0936デフォルトの名無しさん
NGNG0937デフォルトの名無しさん
NGNGJavaでいうtoStringやParseIntみたいなAPIはあるのでしょうか?
0938デフォルトの名無しさん
NGNG0939デフォルトの名無しさん
NGNGsprintf関数?
0940デフォルトの名無しさん
NGNGほとんどの環境でitoaがあると思うけど。
0941デフォルトの名無しさん
NGNGなんですか? String型って。
0942デフォルトの名無しさん
NGNG多分managed C++のアレですよ。
0943デフォルトの名無しさん
NGNG>void hoge(int *x, int *y);
「参照渡し」とかでぐぐれば見つかるんじゃない?
ポインタを理解してれば自動的に理解できると思うんだけど。
0945デフォルトの名無しさん
NGNGunsigned 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デフォルトの名無しさん
NGNG0947デフォルトの名無しさん
NGNG0948デフォルトの名無しさん
NGNGこんなもんでどうよ。
コンパイラによっては警告くらいは出ちゃうかもしれんが。
unsigned char uchar = 'c';
_Bool bset[sizeof(unsigned char)*8];
for(int i=0; i<8; i++) bset[i++] = (((128>>i) & uchar)!=0);
0949デフォルトの名無しさん
NGNG0950デフォルトの名無しさん
NGNG…std::bitset::to_string()
0951デフォルトの名無しさん
NGNG0952デフォルトの名無しさん
NGNGdoubleとfloatのビット列、見てどうすんの
0953デフォルトの名無しさん
NGNG昔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;
}
0954953
NGNG「ウェブブラウザで見れないのは」が抜けてました.
0955デフォルトの名無しさん
NGNGフラグが3つ以下の場合はbitsetで実装するよりbool型変数3個の方がマシということだね。
ま、そんなことよりマスキング速度やソースコードの保守効率が大事なのだろうけど。
0956デフォルトの名無しさん
NGNG0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNGmycls a,b;
a.x = 3;
として,myclsのインスタンスa,bを用意してaのメンバ変数xに3を代入して,
それをb.xのようにして参照することは可能ですか?
class でunionっぽいものを作りたいんですけど。
0959デフォルトの名無しさん
NGNGaかbかどっちかを参照にするか、あるいはxを静的にするかしろ。
0960デフォルトの名無しさん
NGNGやりたいことが明確にわからないが。
// mycls 内のxを共有する。
class mycls{
static int x;
};
// a と b が同じオブジェクトを参照するようにする。
mycls a;
mycls &b = a;
0961958
NGNG0962デフォルトの名無しさん
NGNG知らなかったからってひがむなYO!!!
0963デフォルトの名無しさん
NGNGstruct 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面白いよ君。
いや嫌味じゃなくて、その発想は大切にしたまい。
0965デフォルトの名無しさん
NGNGfunc(b[2]); → func(&b[2]);
0966デフォルトの名無しさん
NGNG//構造体宣言
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[])
{
・・・・
}
に変更したところエラーがでなくなりました
ありがとうございました
0967966
NGNGb[2]の内容をfunc内で参照したかったのです
b[]をグローバル変数にすればいいとも考えたのですが
std::vector<struct a> b(c); のcの部分はいろいろ変わるので
グローバル変数にできなさそうでした
あと、話は変わりますが
関数A内で関数Bを呼び出さない場合
関数A内で宣言された変数を他の関数B内で参照するにはどうすればいいのでしょうか
0968デフォルトの名無しさん
NGNG>b[2]の内容をfunc内で参照したかったのです
その例では、値渡しも明快だと思う。
void func(struct a b) /* structは省略してよい。 */
{
}
std::vector<a> b(c);
func(b[2]);
>関数A内で関数Bを呼び出さない場合
>関数A内で宣言された変数を他の関数B内で参照するにはどうすればいいのでしょうか
自動変数(普通の関数内変数)はその関数の実行中しか存在しないから、
そういうことはできない。
0969デフォルトの名無しさん
NGNG>自動変数(普通の関数内変数)はその関数の実行中しか存在しないから、
>そういうことはできない。
今作ってるプログラムは関数A内で求めた結果を
他の関数でも自由に参照できないと困るプログラムなんですが
せっかく求めた結果が使えないなんて…
代替えの方法もないのでしょうか?
0970デフォルトの名無しさん
NGNG戻り値とか参照・ポインタ渡しにするとか
0971デフォルトの名無しさん
NGNG>今作ってるプログラムは関数A内で求めた結果を
>他の関数でも自由に参照できないと困るプログラムなんですが
ターミノロジが非常に怪しいのでコードで具体例を示された方がいいですよ
(入門書を一通り読まれることをお薦めします)
int func ()
{
int result (0);
return result;
}
0972デフォルトの名無しさん
NGNG0973デフォルトの名無しさん
NGNGそんなことは言う必要はない
0974デフォルトの名無しさん
NGNGよく分からないというかポインタを使うメリットが明確に書いてある参考書に巡り会っていないので
何でポインタを使わなければならないのかが理解できないのです。ポインタのメリットを教えていただけないでしょうか?
宜敷お願いします。
0975デフォルトの名無しさん
NGNG0976デフォルトの名無しさん
NGNG#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デフォルトの名無しさん
NGNGshared_ptrや参照しか使わないってなら納得がいくが。
0978デフォルトの名無しさん
NGNGまぁまだ二週間だからね
0979デフォルトの名無しさん
NGNG理解していないと書いてあるように見えるが。
0980デフォルトの名無しさん
NGNG良く嫁
0981デフォルトの名無しさん
NGNGおーばーへっどの軽減。
0982デフォルトの名無しさん
NGNG「使うメリット」というと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
0983982
NGNGhoge 0 -> 0
hoge 1 -> 1
0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNGほかにどう読めばいいんだ。
0986デフォルトの名無しさん
NGNG表現が食い違ってるだけだろ
0987デフォルトの名無しさん
NGNGで、せっかちor勉強嫌いな人は
A.「Cは糞」認定して挫折を誤魔化す。
B.文字列が理解できず他スクリプト言語と同じことをやってバッファオーバフローを埋め込みまくる。
このいずれかへ進路をとることになる。
Aの人はクダを巻くだけで他人への迷惑はないのだが、問題はBの人だ。
0988デフォルトの名無しさん
NGNGあえてそんな変な例出さなくても・・・。
可変長配列もマップもツリーもリストもポインタ使う。
0989デフォルトの名無しさん
NGNGまぁポインタのかわりに整数でも実装できるけどさ
0990デフォルトの名無しさん
NGNGポインタとは「アドレスを指す変数」のこと。
C言語がポインタを使うのは、所詮「高級アセンブラ」であるため。
ポインタのメリットとかいう問題ではない。
C++を経て、ポインタを排除したのがJava。
0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG/___|ミ ガッ
.|| ヾ ミ 、 ガッ
∩_∧/ヾヽ
| ,| ゚∀゚). .| |;, ガッ
/ ⌒二⊃=| |∵.
.O ノ %`ー‐'⊂⌒ヽ ガッ
) ) ) )~ ̄ ̄()__ ) ←>>991
ヽ,lヽ) (;;;;;;;;;;;;;;;;;)(_(
次スレまだー?
0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNGJavaはポインタを排除したのではない。隠蔽したのだ。
0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNGC言語でポインタを使うことは強制されてないよ。配列を扱うために用意されたもの。
0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000Ruby最強!
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。