【初心者歓迎】C/C++室 Ver.19【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/06/26(日) 22:45:25ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
http://pc8.2ch.net/test/read.cgi/tech/1117984322/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0153デフォルトの名無しさん
2005/06/29(水) 02:11:36んじゃ猫のコピペで勉強だな
0154デフォルトの名無しさん
NGNG>グラフィックライブラリとは一体何ですか?
BASICの場合は、言語自体に描画機能が付いてたけど、
C/C++には描画機能がないので、
代わりに、プラットフォームが用意する関数郡(ライブラリ)を呼ぶ。
たとえば Windows で円を描きたかったら、Ellipse、
UNIX等の X Window システム上で円を描きたかったら、XDrawArc、
を呼び出す、という具合に。
>>152
>コピペでいいんですか?w
いいんですw
初めは部品部品のコピペで、必要に応じてパラメータをいじればいいと思う。
というか慣れてきた後も、(信用できる)サンプルコードの
コピーをいじるって手法はかなり活躍するかと。
生のAPIを使ってWindowsプログラムを作る場合は、
誰が書いてもああいうコードが必要になるから覚悟したほうがいい。
でも機能のかたまりは使い回せるように自分用のライブラリでも
作っておけば、アプリ作成はそんなに辛くないと思う。
VisualC++のMFCとかC++Builderとか使うと
生のAPIをあんまり使わずに簡単にWindowsアプリ組めると思うけど、
俺は使ったことないのでわからんぽ。
0155デフォルトの名無しさん
2005/06/29(水) 02:14:01DXにいくとDQN化する可能性大
0156デフォルトの名無しさん
2005/06/29(水) 02:39:08ウィンドウクラス、ウィンドウプロシジャ、リソース...)を
一通り理解したらさっさとMFCかATL/WTLへ行くよろし。
なお、「理解」したいんなら猫は適切ではない。
0157デフォルトの名無しさん
2005/06/29(水) 02:40:27パイプ処理はもちろん環境依存。
sendmailのようなプログラムとどういうやりとりをしたいのか書きましょう。
0158デフォルトの名無しさん
2005/06/29(水) 02:48:59サンプルを見て理解できなかったので、色々検索してみました
が、上手く掛かりませんでした。
pBufferに、freadでファイル内のバイナリデータ全て
を入れてます。(正しくは指している、です)
typedef struct {
int num;
float (*f)[16];
} t_loader;
t_loader* LoadFile(char* pFilename)
{
t_loader* pLoader;
// ファイル読み込み&Allocate
(略)
// mallocの戻り値ポインタを変換
pLoader = (t_loader*)pMallocPtr;
// ココです
pLoader->f = (float(*)[16])( (long)pLoader->f + (long)pLoader );
ポインタをlongにキャストし、「加算」した値というのは
どういう意味を持つのでしょうか?
キャストはアドレス値に変換しているのは分かるのですが、
加算というのが理解できないです。
0159デフォルトの名無しさん
2005/06/29(水) 03:21:21pLoader->fを+1すると, sizeof(float)*16バイト進んじまうだろ?
任意バイト進めるには(char *)とか(long)とかにキャストする必要がある。
ってことなんじゃねぇかな、何したいのか分からないこの子ー度。
0160デフォルトの名無しさん
2005/06/29(水) 03:26:35それ、実際に動作するコードなのか?
少なくともそれだけだと、ちょっと理解しかねる
0161デフォルトの名無しさん
2005/06/29(水) 03:31:540162デフォルトの名無しさん
2005/06/29(水) 03:36:300163デフォルトの名無しさん
NGNG161じゃないが、演算のためにポインタを整数値にキャストすること自体が
間違ってると言いたいのだろう。
0164デフォルトの名無しさん
2005/06/29(水) 03:53:39アドレス+アドレスって、何か意味あんのか
一体何がしたいんだ
0165158
2005/06/29(水) 03:54:00int n;
int nA;
...
float (*f)[16];
float (*f1)[4];
...
だから、本来(というより自分の知識内でのやり方)は
アドレスをサイズ分ずらしメンバのポインタに入れていくのを
longキャストの部分のおかげでコード量がかなり抑えられているように
感じます。
ポインタ->整数値の例を取り上げたサイトは御存じありませんでしょうか
0166デフォルトの名無しさん
2005/06/29(水) 03:58:21気のせいだろうか
それにしても>>158のコードは不可解
0167デフォルトの名無しさん
NGNG>pLoader->f = (float(*)[16])( (long)pLoader->f + (long)pLoader );
この行より前に、ポインタに整数値読み込む処理があるだろ?
組込系とかで、めちゃめちゃに資源が限られてたりするわけ?
そうでなければ、そのサンプルは糞だから参考にしないほうがいい。
0168デフォルトの名無しさん
2005/06/29(水) 04:10:072)pLoaderに、データ読み込み
3)pLoader->f1, pLoader->f2,....を再計算
ってとこかな
いや実に糞なコードだな
組み込みであっても、不要なコードだろ
0169デフォルトの名無しさん
2005/06/29(水) 04:10:43((float*)( (long)pLoader->f + (long)pLoader ))[16]
これならまだわかるが。
0170デフォルトの名無しさん
2005/06/29(水) 04:14:080171デフォルトの名無しさん
2005/06/29(水) 04:15:10はぁ?
(float(*)[16])は、float[][16]のような二次元配列を指すポインタに
キャストしとるだけだろ
0172デフォルトの名無しさん
2005/06/29(水) 04:22:42なるほど、やっとわかった。
なんつーか高度なのか
単にわかりづらいだけのコードなのかわからん。
0173デフォルトの名無しさん
2005/06/29(水) 04:24:08そうか。ポテドンだったのか。
0174デフォルトの名無しさん
2005/06/29(水) 04:35:16やっとわかった。
t_loaderのメンバのポインタは、ロード時にfread()でセットされるんだろ。
ファイルのヘッダレコードの中に、構造体のレイアウトどおりに
オフセットが記録してあって、データの先頭からのバイト位置(オフセット)が
一旦ポインタに格納される。
で、データをロードした後で、メモリ上のレイアウトを再計算してるわけだ。
ちょっとトリッキーだな。
0175158
2005/06/29(水) 04:44:35入れておくのですか。
ポンと手を叩きたくなるほど納得行く説明
ありがとうございました。
0176デフォルトの名無しさん
2005/06/29(水) 09:53:020177デフォルトの名無しさん
2005/06/29(水) 13:45:330178デフォルトの名無しさん
2005/06/29(水) 13:59:24error C2653 : 識別子がクラス名でも名前空間名でもありません。
というエラーが出るのですが
0179デフォルトの名無しさん
2005/06/29(水) 14:08:45ヘッダをインクルドする前に型を使っている予感
0180デフォルトの名無しさん
2005/06/29(水) 14:14:29環境依存。
0181デフォルトの名無しさん
NGNGヒント:スレタイ
0183デフォルトの名無しさん
2005/06/29(水) 14:38:29ありがとうございます。解決しました。
0184デフォルトの名無しさん
2005/06/29(水) 18:54:00スマソ
0185デフォルトの名無しさん
2005/06/29(水) 19:25:09using namespace std;
class CA {
public:
CA(void){}
CA(int){cout << "a";}
};
main()
{
//new CA(1)[2];
//new CA[2](1);
}
CA(int) のコンストラクタが2回呼ばれると思ったのですが、駄目でした。
配列でとった時、デフォルトコンストラクタ以外を走らせるのは不可能なの
ですか?
0186デフォルトの名無しさん
2005/06/29(水) 19:44:500187デフォルトの名無しさん
2005/06/29(水) 19:47:56C++0xを待たれい
0188デフォルトの名無しさん
2005/06/29(水) 19:49:32諦めます。レスあじがとございました;;
0189まとめ中
2005/06/29(水) 20:02:31ver17あたりからまとめてる所。
1スレだけで膨大な量なんでメモ帳で項目分割。
17以後のログは勝手にまとめてますが許してください。
17以前は過去ログにあるものだけ掘って見ます。
過去ログ進呈してくださる方歓迎。
日々日々良ソースやアルゴリズムなど有難う。
プログラマの皆さんに感謝をしつつ、まとめ作業開始。
以後、何事も無かったかのように本来の質疑応答をどぞ ↓
0190デフォルトの名無しさん
2005/06/29(水) 20:06:58配列各要素に同じ値でいいんだったら、
class CA1 : public CA {CA1() : CA(1) {}};
とでもすればいいじゃん。
#私は嫌だけど。
0191デフォルトの名無しさん
2005/06/29(水) 20:07:47new CA[2]; ってどういう意味ですか?
どういうふうに使うのですか?
0192デフォルトの名無しさん
2005/06/29(水) 20:09:09頑張れよー
0193デフォルトの名無しさん
2005/06/29(水) 20:26:40CAがクラスならCAクラスのインスタンスを2つ作る
CAが何かのデータ型なら、2つ分の連続したCA型変数の領域を確保する
0194デフォルトの名無しさん
2005/06/29(水) 20:33:47#include <iostream>
using namespace std;
class CA
{
public:
CA(){cout << "default" << endl;}
CA(int x){ cout << "param int x = " << x << endl;}
};
main()
{
new CA[2](10);
}
[実行結果]
param int x = 10
param int x = 10
0195デフォルトの名無しさん
2005/06/29(水) 21:00:19ありがとうございます。
0196デフォルトの名無しさん
2005/06/29(水) 21:11:23どうすりゃいいんだ?一応インストしてみたら使えるし。
まぁ、いいや。わーいいいもん手に入れたー
0197デフォルトの名無しさん
2005/06/29(水) 21:12:060198デフォルトの名無しさん
2005/06/29(水) 21:13:59所詮は過去のコンパイラよ
0199デフォルトの名無しさん
2005/06/29(水) 21:28:580200145
2005/06/29(水) 21:57:49いきなり数万も投資するのは抵抗があるので、とりあえずフリーでダウンロードできる
VisualC++Express2005Beta2とかいうのをダウンロードしたのですが、ボタンが多すぎるし
ヘルプは何処を読んで良いのか解らず全然使い方が解りませんorz
0201デフォルトの名無しさん
2005/06/29(水) 22:06:21VCがそれなりに便利なのは確かだけど
0202145
2005/06/29(水) 22:08:26DOS窓から使う味も素っ気もない奴なんですが、これで問題ないでしょうか?
0203デフォルトの名無しさん
2005/06/29(水) 22:08:53↓でも使ってみれば?C/C++じゃないけどC++書けるなら簡単に使えるはず
http://onigiri.s3.xrea.com:8080/delphi/index.php?Delphi%A4%CE%C6%FE%BC%EA%A4%C8%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%2FDelphi6
0204デフォルトの名無しさん
2005/06/29(水) 22:17:00おまいらほめられて伸びるタイプなんですね
0205デフォルトの名無しさん
2005/06/29(水) 22:42:10part18までのログdat
ttp://www.uploda.org/file/uporg137053.zip.html
0206デフォルトの名無しさん
2005/06/29(水) 23:46:24そんな文法は標準では無かったはず・・・。
コンパイラ何?
0207デフォルトの名無しさん
2005/06/29(水) 23:47:39組み込み配列の要素ごとのコンストラクタ制御について、何か提案されてたっけ?
0208過去ログQ&Aまとめ中 ◆tOP1/BWZ7g
2005/06/30(木) 00:01:33有難うございます。作業量大幅UPキター(汗
作業してたらこんな時間orz
明日からpart1から編集入ろう。
まだローカル作業中。ページ申し込みしてきました。
1日で100レス以上行くので早い事part19まで編集しなければ追いつかない。
ガンガル
スレ汚しレスすまそ。
以後、何事も無かったかのように ↓
0209デフォルトの名無しさん
2005/06/30(木) 00:03:57現時点からにしとけよ。
0210デフォルトの名無しさん
2005/06/30(木) 00:09:07例えば、エディタとかゲームとか。普通にprintf系で出力してないんでしょうか。
0211デフォルトの名無しさん
2005/06/30(木) 00:09:220212デフォルトの名無しさん
2005/06/30(木) 00:45:05cursesのことを指してるのかぇ?
0213デフォルトの名無しさん
2005/06/30(木) 00:47:25エスケープシーケンス
0214デフォルトの名無しさん
2005/06/30(木) 00:56:19もし貴方の優れた試みが成功したならば、恐らく多くの2chのプログラマーが
大きな助けとなるでしょう。
英語の直訳風に言ってみた。
0215デフォルトの名無しさん
2005/06/30(木) 01:06:43>>213
cursesで行けそうですね。有り難うございます。
エスケープシーケンスでもできるんですか?ちょっと想像つかないのですが...
0216145
2005/06/30(木) 01:14:22DelphiってPascalですよね。
CとC++を覚えたばかりで更に他の言語を詰め込むのってどうなんだろう。
普通Winアプリを作る場合、やっぱりC++BuilderとかVC++のようなRADツールを使うんですよね?
メモ帳でWinアプリのソースを書いてBorlandのC++コンパイラを使ってDOS窓からコンパイルしている人っていますか?
VC++Express2005の使い方がどこかにあればいいんですが、全然見つからないorz
やっぱり諭吉さんとお別れして製品版を手に入れるほか無いですかね。
というか製品版にはマニュアルついているんですよね?
パソコンにプリインストされていたOfficeみたいにマニュアルが付属していなかったら最悪orz
0217デフォルトの名無しさん
2005/06/30(木) 01:15:31man terminfo
つか、その手のプログラムのソース見れ
0218デフォルトの名無しさん
2005/06/30(木) 01:16:18「本ページは名無しの、名無しによる、名無しの為の過去ログである。
トピックはどれも現場(学校、研修所、会社、学校)で生まれたものであり、
これを読めば貴方もデフォルトと成ることでしょう(意味不明」
0219デフォルトの名無しさん
2005/06/30(木) 01:54:04man見ときます。すいません。
この手のプログラムって大抵巨大なんで初心者には厳しい...
0220デフォルトの名無しさん
2005/06/30(木) 06:09:52DelphiはDelphiである
0221デフォルトの名無しさん
2005/06/30(木) 07:19:16>CとC++を覚えたばかりで更に他の言語を詰め込むのってどうなんだろう。
そう思うでしょ? でもね、人間というのはティミが考えてるよりもっともっと
包容力があるんだよ。
0222デフォルトの名無しさん
2005/06/30(木) 07:38:49コンパイルは成功するのですが実行しても意図した動作をしません。
恐らく無限ループになっています。
何度か見直して、ちゃんと本の通りになっていると思うのですが・・・何処がダメなのでしょうか?
int main(){
string s;
map <string,int> counters;
while (cin >> s)
++counters[s];
for (map<string,int>::const_iterator it = counters.begin();it != counters.end(); ++it){
cout << it->first << "\t" << it->second << endl;
}
return 0;
}
0223デフォルトの名無しさん
2005/06/30(木) 07:44:19BCC5.5.1 + WindowsXPSP2 では正しく動く。
環境は?
0224デフォルトの名無しさん
2005/06/30(木) 08:07:45cinの入力終了方法を分かってませんでした_no
Ctrl+zを入力たら上手く動きました。
すみません。
0225デフォルトの名無しさん
2005/06/30(木) 10:11:42ダメだこりゃ! パーフーパーフー
0226デフォルトの名無しさん
2005/06/30(木) 10:30:21mapの使用を終える前にkeyをdeleteしてしまうとまずいのでしょうか?
しかし、最初のループでdeleteをせずに後のループでdelete &(it->first)と言う様にやってもダメな様だし
どうすれば良いのでしょうか?やりたい事は文字列をキーにしてunsigned int二つ分のデータを値にする事です。
#include <iostream>
#include <string>
#include <map>
using namespace std;
void itoa(char* str,unsigned int num) //数値から数字への変換関数
{unsigned int radix=10;unsigned int i=0;while(num){str[4-i]=(char)(num%radix+48);num/=radix;i++;}}
int main(){
map <string,unsigned int*> range;int i=0;string *index = NULL;char tmp[5] = "";while(i<10){itoa(tmp,i);index = new string(tmp);
range[*index] = (unsigned int*)malloc(sizeof(unsigned int)*2);(range[*index])[0] = i;(range[*index])[1] = i+10000;
delete index;i++;}i=0;for(map<string,unsigned int*>::const_iterator it = range.begin();
it != range.end(); ++it){
cout << "key:" << it->first << "\tvalue1:" << (it->second)[0] << "\tvalue2:" << (it->second)[1] << endl;free(it->second);}
0227デフォルトの名無しさん
2005/06/30(木) 13:39:36突込みどころ満載なんで一言だけ。
itoaが期待通り動作してない。
0228デフォルトの名無しさん
2005/06/30(木) 14:42:23itoa()のような非標準の関数使うなや。検証できない環境の香具師もいるんだぞ。
0229デフォルトの名無しさん
2005/06/30(木) 14:57:05こう?
#include <iostream>
#include <string>
#include <map>
#include <sstream>
#include <vector>
using namespace std;
int main()
{
typedef string Key;
typedef vector <unsigned int> Value_Container;
typedef map <Key, Value_Container> Map;
Map range;
for (int i (0); i < 10; ++ i)
{
ostringstream index;
index << i;
Value_Container &value_container (range[index.str ()]);
value_container.resize (2);
value_container[0] = i;
value_container[1] = i+10000;
}
for(Map::const_iterator it = range.begin(); it != range.end(); ++ it)
cout << "key:" << it->first << "\tvalue1:" << (it->second)[0] << "\tvalue2:" << (it->second)[1] << endl;
}
0230デフォルトの名無しさん
2005/06/30(木) 15:01:28間違って宿題スレに書いてた..
0231デフォルトの名無しさん
2005/06/30(木) 15:08:39レス良く見れや。itoaをわざわざ定義してるやン
それがおかしいんだけど
あと、このスレは環境依存OKだったはず
>>229
struct Value_Container {
unsigned int first, second;
Value_Container( unsigned int f=0, unsigned int s=0)
: first(f), second(s) {};
};
でいいような。
0232デフォルトの名無しさん
2005/06/30(木) 15:26:07キャストできるけど何が起きても責任は取れない
0233デフォルトの名無しさん
2005/06/30(木) 15:26:58もちろん
typedef pair <unsigned int, unsigned int> Value_Container;
とかも
0234デフォルトの名無しさん
2005/06/30(木) 15:28:440235デフォルトの名無しさん
2005/06/30(木) 15:29:35キャスト以外に方法ないんですかね?
32bitの領域にメモリ確保して移すとか
0236デフォルトの名無しさん
2005/06/30(木) 15:55:54キャストは方法に入らない
ダウンサンクで検索汁
0237デフォルトの名無しさん
2005/06/30(木) 17:13:33コンパイラがstdio.hファイルをオープン出来ないなですが、何故なんでしょうか?
0238デフォルトの名無しさん
2005/06/30(木) 17:16:25コンパイラが正しくインストール/セットアップされていない
0239デフォルトの名無しさん
2005/06/30(木) 17:22:26自分に落ち度があったかもしれません。
もう一度やり直してみます。ありがとうございます。
0240デフォルトの名無しさん
2005/06/30(木) 17:38:53環境変数のチェック汁
0241デフォルトの名無しさん
2005/06/30(木) 18:08:55コンパイラは作動してるんだろうから、環境変数の問題じゃなさそうじゃね?
予想だがBCCの.cfgにパスを書き込んでいないくさい希ガス。
>>237はまずコンパイラが何なのかを書き込みましょう。
でないと答えようがないです。
0242デフォルトの名無しさん
2005/06/30(木) 19:00:04コンパイルできました。
別の本みて、cfgファイル作ってみたら、上手く動作しました。
何で上手くいったのかはよく分かりませんが、何にせよ助言ありがとうございました。
0243デフォルトの名無しさん
2005/06/30(木) 19:06:5564bitであることを明示するにはどうすればいいんですかね?.
(?)hoge
0244デフォルトの名無しさん
2005/06/30(木) 19:20:2664bitポインタの環境ならば*で64bitになるんじゃないのか?
0245デフォルトの名無しさん
2005/06/30(木) 19:26:50どなたか教えてください
mingwのインストールは出来ました
ディレクトリ名はMingw-jpにしておきました
そうしろとあったので
0246245
2005/06/30(木) 19:27:230247デフォルトの名無しさん
2005/06/30(木) 19:39:29亀レスだが、cygwin gcc 3.3.3 です。
0248デフォルトの名無しさん
2005/06/30(木) 19:44:10環境変数
PATH に Mingwのbin CPLUS_INCLUDE_PATH に includeが必要だっけ。
0249デフォルトの名無しさん
2005/06/30(木) 19:49:11設定とは関係なしに明示したいのですが...
ちなみにVS.net2003です
0250デフォルトの名無しさん
2005/06/30(木) 19:49:250251デフォルトの名無しさん
2005/06/30(木) 19:51:58#include <stdio.h>
#define pi 3.141592
double rad(double a)
main(){
int ans,rad,x;
printf("角度を入力してください");
scanf("%lf", &x);
ans=double rad(double a)
printf("%f\n",ans);
}
double rad(double a){
int x;
a=x*(pi/180);
}
こう書いたんですがうまくきません。
0252デフォルトの名無しさん
2005/06/30(木) 19:59:33■ このスレッドは過去ログ倉庫に格納されています