- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:07:56 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/
- 554 名前:デフォルトの名無しさん [2007/10/26(金) 23:50:58 ]
- class A{
private: public: A(); void Show(); vector<VEC> v; }; A::A() { int j=0; for(int i=0; i<10; ++i){ v.push_back(VEC(j)); j+=10; } }
- 555 名前:デフォルトの名無しさん [2007/10/26(金) 23:51:55 ]
- void A::Show()
{ for(int i=0; i<v.size(); ++i){ for(int j=0; j<(v[i].vec.size()); ++j){ for(int k=0; k<(v[i].vec[j].size()); ++k){ cout << v[i].vec[j][k] << " "; } cout << endl; } cout << endl; } } int main() { A aa; aa.Show(); return 0; }
- 556 名前:デフォルトの名無しさん [2007/10/26(金) 23:52:44 ]
- >>553
関数抜けた時点で解放され、別の値に変わる可能性はある ゴミ箱の中身消したけど復活できるかどうかと同じ事だ
- 557 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:04:16 ]
- >>553-555
別にどこもおかしなようには見えないが、どこに問題があると思ってるの?
- 558 名前:デフォルトの名無しさん [2007/10/27(土) 00:49:51 ]
- >>545です。
>>546 >>547 >>556 さんのご指摘もありますが、 newで確保されていないvector配列の中身(vector< vector<int> > vec)が、 最後まで保持されていること・・・ についてです。 vecはクラスの中で宣言はされているものの、 VEC()で代入される中身は局所的なもので、 VEC()を出たらvec配列の中身は、開放されるのかなぁと。 サイトで「vectorは"動的"配列」というのを目にしたのですが、 これは配列のサイズを"動的"に確保するだけで、 newのメモリの"動的"確保とは別物なのではないか? と思ったので、試しています。
- 559 名前:デフォルトの名無しさん [2007/10/27(土) 00:51:53 ]
- >>545です。
かなりトンチンカンなこと言ってると思いますが、 ご指導お願いいたします。m(_ _)m
- 560 名前:デフォルトの名無しさん [2007/10/27(土) 00:57:53 ]
- >>559
クラス内の関数は、抜けても値は保持される 常識だろう vectorとか関係なし
- 561 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:59:15 ]
- >>559
基本的なことが、いくつも、理解できていない気配がする。 泥縄的に教えてもしょーがないので、ちゃんとC++の基本を勉強したほうがいいよ、としか言えない。
- 562 名前:デフォルトの名無しさん [2007/10/27(土) 00:59:20 ]
- オブジェクト指向っていうのは、データに対してあれこれ作業をするって事だ
あれこれ作業するごとにデータが消えていたら駄目だろ
- 563 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:00:16 ]
- v.push_back(VEC(j));
の VEC(j)はどこいっちゃったの? ってこと?
- 564 名前:デフォルトの名無しさん [2007/10/27(土) 01:20:13 ]
- >>545です。
みなさん、レスありがとうございます。 クラスの中でサイズを指定しないと配列の宣言てできませんよね。 もしコンストラクタの引数の値を配列のサイズにしたいときには、 データメンバに、 int a*; を入れて、 コンストラクタの中で、 a=new int[コンストラクタの引数の値]; と(私は)します。 だから、私はvector配列をクラスのデータメンバとするときも、 配列のサイズを指定しないから、 どこかでnewすることでvector配列の領域を確保しなければ ダメなのかぁと思ってしまったわけです。 newをせずに、ただ値を代入しただけでは、 局所な値を代入しているに過ぎないなどと思ってしまいました。 色々考えているうちに、頭の中がごちゃごちゃになってしまいました。 己の力の無さを改めて自覚しました。
- 565 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:31:07 ]
- >>564
vectorの中でnew/deleteしてる。
- 566 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:32:02 ]
- コンストラクタとデストラクタで何か表示するクラス作って
vectorにpush_backしてると何か閃くかもしれない
- 567 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:38:24 ]
- クソッタレな本に引っかかってしまった可哀想な犠牲者なんだろうな。
きちんとした本を読んでいれば間違わないような誤解してるんだもの。
- 568 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:50:13 ]
- これからプログラムを勉強する俺に是非教えてほしい。
ちょっとしたアプリケーションを作りたくて なんとなく、適当に参考書見て、高校の頃少し勉強した、デルファイに似てるような気がしたから VBの参考書買って、MSからVS2008bata2をダウンロードしてサンプルプログラムを作っては 自分なりに書き換えて違う結果を出力させたりと、少しずつ理解してきてる・・つもり。 けど、VBとC++はどのスレ見てもVBは糞ってよく見るんだけど、それはなぜですか? 自分は結構VBがなじんできてるしこの頃。。 実際、プログラムの組みやすさ、軽さ、ほか色々。 ここで聞くのはどうかと思うけど、できれば教えてほしい もし、VBはやめとけ!と言うならばお勧めの言語を教えていただきたい。
- 569 名前:デフォルトの名無しさん [2007/10/27(土) 01:54:18 ]
- すいません、教えていただけないでしょうか。
C言語で、2つのスレッドが交互にグローバル変数を参照→インクリメントして、 決められた値になったら終了する。という処理を作りました。 ここからグローバル変数を用いずにスレッド間でデータを渡しあうことで同様の処理を 実現したいのですが、どうすればいいでしょうか。 自分で調べたところ、スレッド間ではお互いのメッセージキューへ格納→読み出しを行えば データを渡せることがわかったのですが、見当違いな考えかもしれません…。 どのような方法・関数を用いればいいか、ご教授のほど宜しくお願いします。
- 570 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:59:25 ]
- OSぐらい書けよ
- 571 名前:デフォルトの名無しさん [2007/10/27(土) 02:02:14 ]
- >>570
申し訳ありませんでしたorz 作成環境は以下のとおりです。 OS:Windows XP コンパイラ:Microsoft Visual C++ 2005 Express Edition
- 572 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:03:22 ]
- VBが糞と言われる理由
1. VB自体ではなく、VB使いが糞であるため 2. VBでプログラミングを勉強すると糞になるため 3. VBが適切な手段の場合には良いが、そうではないのにVBを使う糞がたくさんいるから 4. VB.NETではないVBは既に終わっており、なおかつ、VB.NETをやるならC#をやるべきだから
- 573 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:05:35 ]
- >>569
質問が抽象的すぎる。 もっと具体的に詳しく。 また、なぜ、グローバル変数をやめようと考えているのか、その理由も。
- 574 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:16:09 ]
- ∧_∧ クワッ!
∩`iWi´∩ ヽ |m| .ノ |. ̄| U⌒U
- 575 名前:デフォルトの名無しさん [2007/10/27(土) 02:17:26 ]
- >>574
それ何か可愛いな。
- 576 名前:デフォルトの名無しさん [2007/10/27(土) 02:25:48 ]
- >>573
色々と足りない部分が多くて申し訳ありません。 初心者の為、処理が的確ではないかもしれませんが現在の処理は以下のとおりです。 unsigned __stdcall thread0(void *lpx) { /*排他制御にミューテックスを使っています*/ HANDLE hM; hM = *(HANDLE*)lpx; while ( 100 > nCnt ) { WaitForSingleObject( hM, INFINITE ); nCnt++; printf("nCnt = %d", nCnt); ReleaseMutex( hM ); } printf("thread0 END"); return 0; } これと同様の処理を行うスレッドがもう一つありまして、 交互にグローバル変数nCntをインクリメントして、100になったら終了させるようにします。 このnCntをグローバル変数ではなく、ローカル変数にしてスレッド間で値を渡し合うことで、 同様の処理ができるようにしてみたいのです。 グローバル変数を使わない理由ですが、現在C言語を勉強中で、 様々な処理方法を試してみたいと思ったからです。
- 577 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:33:47 ]
- そのスレッドに渡すlpxでミューテックスと一緒に共有したいデータを渡すとか。
struct thread_data { HANDLE hM; int nCnt; }; unsigned __stdcall thread0(void *lpx) { struct thread_data *data = lpx; /*排他制御にミューテックスを使っています*/ HANDLE hM; hM = data->hM; while ( 100 > data->nCnt ) 以下略
- 578 名前:573 mailto:sage [2007/10/27(土) 03:03:46 ]
- >>576
なるほど。文字どおりの処理をしていたのね。ごめん。 まず、そのプログラムには重大な問題がありそう。 それはともかく、 スレッド毎にメッセージ・キューを持たせて、相互にメッセージを送り合う ということだと、まず、最初の選択として、 Windowsが提供してくれるメッセージ・キューを使うのか、 それ以外のメッセージ・キューを使うのか、 というのがあるが、とりあえず前者の方向で。 Win32APIのPostThreadMessageを使う。 まずは、MSDNライブラリ等でPostThreadMessageの解説を見よう。
- 579 名前:デフォルトの名無しさん [2007/10/27(土) 03:04:25 ]
- >>577
ご助言ありがとうございます。 ただ、私が今回試してみたいのはスレッド間通信?というものになりそうなんですが、 このコードがそういった処理になるのでしょうか。 サンプルコードが分かり辛いと思うので、自信がありません…。
- 580 名前:デフォルトの名無しさん [2007/10/27(土) 03:07:12 ]
- >>578
ありがとうございます。 エラー処理や組み方自体についても、学ぶべきことが多いですorz PostThreadMessageについて、早速見てみます。
- 581 名前:573 mailto:sage [2007/10/27(土) 03:14:26 ]
- ついでに>>576のプログラムの問題点と解決方法を。
まず、コンパイラの最適化の問題。 変数nCntの宣言にvolatileを付けていますか? 付けていなければ、付けること。 次に、100 > nCnt の比較が、排他制御の外にあること。 nCntに触っていいのは、排他制御の内側だけ。
- 582 名前:デフォルトの名無しさん [2007/10/27(土) 03:28:55 ]
- >>581
たしかにこれでは…色々と参考になりました。 MSDNライブラリで調べたところ、 PostThreadMessage関数でデータをポストして、 GetMessage関数でポストされたデータを取得することで、 スレッド間でデータをやりとりできそうなので、早速試してみます。 ご助言いただいた方々、本当に有難うございましたm(_ _)m
- 583 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:47:47 ]
- >>545です。
>>554 のA()で、 A::A() { int j=0; for(int i=0; i<10; ++i){ v.push_back(VEC(j)); j+=10; } } としているのですが、ここで作られるVEC型オブジェクトは、 局所的なもので、寿命はfor 1回分の間だけですよね? コンストラクタが呼ばれた直後にデストラクタが呼ばれるので、 vector<VEC*> v; と宣言を直して、 A()では、 v.push_back(new VEC(j)); としなければダメですか? 何度も申し訳ないです。
- 584 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:55:04 ]
- VEC(j)のコピーがvector内に追加される
- 585 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:59:02 ]
- > コンストラクタが呼ばれた直後にデストラクタが呼ばれるので、
ただし、Aのvector<VEC> v;は、v.push_backの内部で、 引数を使ったコピーコンストラクタを使い、勝手に保持する。 vector<string> v;でv.push_back("ababa");と渡しても、 const char *pを受け取って内部で string(p) のようにして保持する。 > vector<VEC*> v; > v.push_back(new VEC(j)); のようなことをするのなら、Aのデストラクタで、 push_backの所でnewしたぶんをdeleteしてやる必要がでてくる。
- 586 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:59:51 ]
- かぶったorz
- 587 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 18:34:43 ]
- >>583
基本ができてなさすぎ。 ちゃんと勉強して出直せ。
- 588 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:26:59 ]
- >>583
いろいろごっちゃになっているようだが、 ・関数内で宣言されたオブジェクトは関数が終わったら破棄される と言われて、 関数が終わったらvectorの中身が壊れるのでは、と疑問を持ったみたいだけど、 この場合は関数へ渡す引数として宣言した「一時オブジェクト」なので問題ない。 そうでなくても、vectorは要素を「コピー」して保持するので、 元のオブジェクトが破棄されても何ら問題はない。
- 589 名前:588 mailto:sage [2007/10/27(土) 20:31:56 ]
- 間違えた、俺がごっちゃになってるorz
書き直すと、 関数内で作ったオブジェクトをvectorに入れたら、 関数を抜けた時にそのオブジェクトが破棄されてvectorの要素が無効になるのでは、と疑問を持ったみたいだけど、 この場合はvectorへ渡す要素として宣言した「一時オブジェクト」なので問題ない。 そうでなくても、vectorは要素を「コピー」して保持するので、 元のオブジェクトが破棄されても何ら問題はない。
- 590 名前:588 mailto:sage [2007/10/27(土) 20:34:03 ]
- ああ、いや、一時オブジェクトは関係ないか、結局破棄されるんだから
とにかくvectorはコピーコンストラクタ呼び出してコピーしてるので、 元のオブジェクト破棄しても問題ない
- 591 名前:588 mailto:sage [2007/10/27(土) 20:42:08 ]
-
- 592 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 20:47:52 ]
- ややこしく考え杉。
int g_c ; void funcA(int& a) { int b = a ; g_c = a ; } void testA(void) { int x = 3 ; funcA(x) ; } これと同じよ
- 593 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 21:33:41 ]
- フフフフフフハハハハハハ
- 594 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:07:18 ]
- int ary[2] = { 1000 , 2000 };
int *po; po = &ary[0]; printf("po\t = %x\n" , po); printf("*po++\t = %d\n" , *po); po++; printf("po++\t = %x\n" , po); printf("*po++\t = %d\n" , *po); *po++; printf("po++\t = %x\n" , po); printf("*po++\t = %d\n" , *po); これで最後の方で*poに1を加えてるつもりなのですが、変な値になって *po+=1だと大丈夫です *poはポインタの中身だと今まで思ってたのですが、、、、なんでなのでしょうか
- 595 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:09:12 ]
- (*po)++;
釣りなんだろうけど
- 596 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:21:37 ]
- 理由のところ、教えてくれませんか
なんで()つけないとダメなのか。 というか中身にアクセスするときは()つけた方がいいんでしょうか
- 597 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 23:28:44 ]
- >>596
演算子の優先度
- 598 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 04:23:38 ]
- *po++ は *(po++) という意味だから、だな
- 599 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 04:48:37 ]
- 俺は演算子の優先度の表を暗記するだけの頭脳がないので、
決して、 *po++ ; なんてコードは書かない。 他人が書いたのを読まないといけないときは、優先度の表を見て確認する。 そもそも、後ろに++を付けるのは特別なときだけだし・・・。
- 600 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 13:39:19 ]
- *++p
- 601 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 13:40:46 ]
- ++(*po);
- 602 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 20:56:27 ]
- >>601
括弧イラネ
- 603 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:02:43 ]
- 優先順位覚えてないから付けといて
- 604 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:33:35 ]
- 左側に単項演算子二つで優先順位も糞もないだろ
- 605 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:52:24 ]
- むしろ全ての演算子を単項演算子にすれば頭で思い浮かべたものをキャレットを一々前後させずに一気に書ける
- 606 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 21:55:25 ]
- >>605
それって何て逆ポーランド記法?
- 607 名前:デフォルトの名無しさん [2007/10/28(日) 23:15:58 ]
- ★改行が多すぎと言われたので、何度かにわけます。
構造体Sのvectorがあって、SのメンバdoubleDataに関してfindをしようとしています。 (#include <algorithm>しています) struct S{ string strA; int intData; double doubleData; }; findを使っているところは、こんな感じです。 vector<S>::iterator it; it = find(VecTest.begin(), VecTest.end(), 1.7); cout << (*it).doubleData << endl;
- 608 名前:デフォルトの名無しさん [2007/10/28(日) 23:16:34 ]
- ★続き
Boland55で、以下のようなエラーが出ます。 エラー E2094 c:\Borland\Bcc55\include\algorith.cc 72: != 演算子が使われたがクラ ス S では double 型のための定義が存在しない(関数 find<S *,double>(S *,S *,const double &) ) 警告 W8057 c:\Borland\Bcc55\include\algorith.cc 75: パラメータ 'last' は一度も使 用されない(関数 find<S *,double>(S *,S *,const double &) ) 警告 W8057 c:\Borland\Bcc55\include\algorith.cc 75: パラメータ 'value' は一度も 使用されない(関数 find<S *,double>(S *,S *,const double &) ) *** 1 errors in Compile ***
- 609 名前:デフォルトの名無しさん [2007/10/28(日) 23:17:24 ]
- ★続き
ちなみに、以下のような演算子オーバーロードをしているのですが、 何がよくないのでしょうか。 bool operator == ( const S& left, const S& right ) { return left.doubleData == right.doubleData; } bool operator != ( const S& left, const S& right ) { return left.doubleData != right.doubleData; }
- 610 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:32:46 ]
- find には 1.7 じゃなくて S を渡さんといかんのでは?
- 611 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:34:03 ]
- struct has_double
{ bool operator()(const S& s, double d) const { return s.doubleData == d; } }; find_if(VecTest.begin(), VecTest.end(), has_double(1.7));
- 612 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:36:44 ]
- まちがった
struct has_double { double d; has_double(double d) :d(d) {} bool operator()(const S& s) const { return s.doubleData == d; } };
- 613 名前:デフォルトの名無しさん [2007/10/28(日) 23:44:17 ]
- >> 612さん
コンパイル、通りました!すごい!! でも全く解読できましぇん。 一語一句の意味をこれから勉強します。。。
- 614 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:55:56 ]
- >>612
テンプレート使って、 template<double value> struct has_double { bool operator()(const S& s) const { return s.doubleData == value; } }; find_if(VecTest.begin(), VecTest.end(), has_double<1.7>); ってのではダメ?
- 615 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 00:00:45 ]
- はは
定数だからね
- 616 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 00:13:48 ]
- もっと簡潔・明瞭に書く方法ないのかなぁ。
- 617 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 09:53:08 ]
- C++勉強しはじめてリファレンスを知って、
ポインタ使うよりずっといいじゃないですかって気分なんですが、 関数の引数としてリファレンス使うときに、 void hoge(int* out1, int* out2); //out2の出力が必要ない場合はout2としてNULLを渡す のような仕様はリファレンスでは実現できないってことなんでしょうか? 毎回ダミー変数宣言して渡すのも馬鹿らしいし。
- 618 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 12:44:05 ]
- >>617
どうしてもやりたかったらこういう手はどうだろう。 -- int dummyOut; void hoge(int & out1, int & out2 = dummyOut) { if (& out2 != & dummyOut) { out2 = someOutput; } } -- ダミーは必要だけど、毎回じゃないし使わないときは出力処理を回避することもできる。
- 619 名前:かぜひいてます←寝てろ mailto:sage [2007/10/29(月) 13:39:10 ]
- >>617
ダミー変数を渡すのがバカらしいのなら、ポインタ渡しのままでいいのでは? 参照は、結局ポインタ渡ししてるだけだから、組み込み型を渡すときはあまりメリットがない。 しかも、ポインタ渡しでも上手に組めば代入するのは1、2ヶ所だから読みにくくも無い。 俺のスタイルとしては、値を返すときは参照型ではなくポインタ渡し。 参照型が活きるのはクラス等を渡すとき。 void hoge(vector<char>& ref_v); void hoge(const vector<char>& ref_v); メンバアクセス演算子( . -> )がオーバーライドされてる場合でも深く考えなくともよい。
- 620 名前:619 mailto:sage [2007/10/29(月) 13:44:56 ]
- >>618
それも一応考えてみた。他にもオーバロードって手もあるよね。
- 621 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:30:48 ]
- int val = 100;
val = val++; int result = val; このとき、result はいくつになりますか? また、処理系に依存せず、同じ値になりますか?
- 622 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:44:58 ]
- >>621
www.kouno.jp/home/c_faq/c3.html#3
- 623 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:47:49 ]
- >>622
おぉ。ファック。 なんてこった。 ありがとう。
- 624 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 14:57:30 ]
- ファックしてもいい?
- 625 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 00:59:37 ]
- >>572
超遅レスで申し訳ない。 VB自体は糞というわけではないのか。。 もし、また改めて勉強するとするならば、VisualC++とVisualC#はどちらがお勧めですか? もちろんどんな物を作るか、目的は何か、ってのが決まっててこそ選ぶのかもしれないけど、 もし、将来性等考えたらどっちになります??
- 626 名前:デフォルトの名無しさん [2007/10/30(火) 01:01:04 ]
- VisualC#
- 627 名前:625 mailto:sage [2007/10/30(火) 01:06:12 ]
- 検索したらいっぱい出てきたんでとりあえず色々眺めて決めます。
・・とおもったらレスがついてた。 >626 なぜですか?よかったら教えてほしいです。
- 628 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 01:26:32 ]
- 自動車に例えるなら、
C# → トヨタ自動車本社の設計技術者 C++ → トヨタに部品を収めている協力会社の設計技術者 そういう感じ。
- 629 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 01:41:21 ]
- …え。
- 630 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 06:09:37 ]
- C# → Windowsユーザー
C++ → マイクロソフト
- 631 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:29:36 ]
- >>628
確かに C++ の方がスキルが必要だから間違ってないね。
- 632 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:36:13 ]
- .NET Frameworkって「のり」があるからC#, C++, F#とどれも使えるのが一番だね
状況に応じてシームレスに言語を選択できる開発環境ってのはかなり美味しいだろう さらにPowerShellスクリプトも使えば窓も*nix系に匹敵するかなり強力な環境になると思う
- 633 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 12:24:06 ]
- んじゃ、
C→町工場の工員 こんなかんじか?
- 634 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:09:12 ]
- C→拡張しすぎてわけがわからなくなった、おじいちゃん技術者
- 635 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 15:43:19 ]
- 質問させてくださいー・・・。
Visualstudio2005のC++でCのソースをコンパイルしているんですけど、 off_t strip_offset, data_offset, curve_offset; off_t thumb_offset, meta_offset, profile_offset; の2行で構文エラーって出るんです。 error C2061: 構文エラー : 識別子 'strip_offset' error C2061: 構文エラー : 識別子 'thumb_offset' ココだけ見てもわかんねーよって感じでしょうか・・・。 なんとなく原因が雰囲気でも分かれば教えてください。
- 636 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 15:47:08 ]
- >>635
off_tのtypedefを探して貼れ
- 637 名前:635 mailto:sage [2007/10/30(火) 16:11:04 ]
- レスありがとうございます。
typedef、存在しないみたいです。 設定しなきゃ駄目ですか?
- 638 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:14:16 ]
- typedefが存在しないわけがなかろう。
off_tは予約語じゃないぞ。
- 639 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:16:33 ]
- それか、struct off_t strip_offsetとして使うべきものかも。
- 640 名前:635 mailto:sage [2007/10/30(火) 16:21:06 ]
- >638
off_t、ココにしか出てこない上にtypedefってのも無いんです。 元々Linux用(?)に書かれたソースらしいんですけど、そっちではちゃんと動いているみたいなんですけど・・・。 すみません、いまいちよく分かってなくて。とにかくtypedefしなきゃ駄目って事でしょうか。 >639 struct off_t strip_offsetみたいにしてみたんですけど、、エラーが出ちゃいますね・・・。 「error C2079: 'strip_offset' が 未定義の struct 'off_t' で使用しています。」 だそうです。
- 641 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:26:44 ]
- >>640
じゃあそのソースがインクルードしているソースやヘッダを 全部調べてoff_tの定義を調べるべきだな。
- 642 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:28:04 ]
- もしかしたらtypedefではなく#defineかもしれない。
- 643 名前:635 mailto:sage [2007/10/30(火) 16:33:32 ]
- >614
インクルードされているファイルって言うと#include <winsock2.h>みたいなやつですよね? 全部調べていくのはちょっと自分には難しいかもしれません。 そっちに原因があるということだったら、コンパイラを変えてみると何とかなるかも、ですか? MinGWとかでコンパイルできるか試してみます! >642 #defineもありませんでした。>635に書いた2行以外のどこにも出てこないんです。
- 644 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:34:14 ]
- #include <sys/types.h>
- 645 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:38:35 ]
- >>643
off_tでぐぐるぐらいの事はしてみたよな?
- 646 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:38:56 ]
- typedef long off_t;
- 647 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:40:53 ]
- >>635
検索を使ってちゃんと探してみたか? 俺は自分の環境で探してみつかったぞ。 しかも難しい定義でもなんでもなかったぞ。 答えは言わない。自分で環境全部きちんと探して。
- 648 名前:647 mailto:sage [2007/10/30(火) 16:45:36 ]
- 答えでちゃったね。
VS C++のファイル検索使えば全検索でも何分もかからないのに。 いずれ仕事にするならそれぐらいはきちんと覚えておいて。
- 649 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 17:01:56 ]
- >644
その記述を入れたらoff_tに関してのエラーは出なくなりました!ありがとうございます。 >645 ググって、検索結果のページも色々参照させてもらったんですけど、なにぶんCそのものについての知識がなさ過ぎて・・・。すみません。 >646 その記述を入れてもoff_tに関してのエラーは出なくなりました!ありがとうございます。 >647 ありがとうございます。皆さんに助けていただいてひとつ前に進めました。 まだエラーが出てるんで先は長そうでけど・・・。
- 650 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 20:50:14 ]
- 理解しないで使うには危険な言語だと思うぞ。
- 651 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 12:14:47 ]
- >>649
「その記述を入れたら出なくなった」じゃなくて、 なんでエラーが解消できたのかを知っておかないと これから先苦労するぞ。
- 652 名前:デフォルトの名無しさん [2007/10/31(水) 18:09:26 ]
- Win32環境+VS2005で開発を行っています。
ダブルクリックでファイルを開く処理に対応させようと頑張っていた所 Debugビルドでは成功したのですが、Releaseビルドにするとファイルを開かなくなりました。 (でもショートカットに開きたいファイル名を指定するとReleaseビルドでもきちんと開く) そこで処理を追っていくと、どうもInitInstanceメソッドが呼び出されていないようなのですが、似たような経験をされた方はいらっしゃらないでしょうか?
- 653 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 18:11:41 ]
- スレ違い
- 654 名前:652 [2007/10/31(水) 18:27:32 ]
- 了解しました、他スレに流れてきます。
|

|