ページ 1 / 1
【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 17:38
by こめかみ
解決以外のアイコンが無くなってしまっているのでこのようなタイトルをつけました。
「C++クラスと継承完全制覇」という参考書をもとに、
stringクラスの練習をしようとVC++で以下のソースを打ち込んだら
--
include ファイルを開けません。'cstring.h': No such file or directory
--
と言われてしまいました。
BCCdeveloperでは出来るのでとりあえず差し迫った問題ではないのですが。
VC++の有料版を買わないと標準クラスライブラリを使えないのでしょうか。
そうでないのなら使う方法や参考になるサイトなど教えてください。
//VC++版
#include <cstring.h>
#include <iostream.h>
main()
{
//文字列を作成する.
Cstring s1("Apple");
Cstring s2("Orange");
Cstring s3;
//文字列を代入する.
s3 = s2;
//文字列を比較する.
if(s3 > s1){
cout << s3 << "は" << s1 << "より大きい\n";
}
return 0;
}
//BCC版
#include <cstring.h>
#include <iostream.h>
main()
{
//文字列を作成する.
string s1("Apple");
string s2("Orange");
string s3;
//文字列を代入する.
s3 = s2;
//文字列を比較する.
if(s3 > s1){
cout << s3 << "は" << s1 << "より大きい\n";
}
return 0;
}
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 17:42
by 御津凪
確か、
#include <cstring>
と、".h"を外せばインクルードできるはず。
(VC++のインクルードでは拡張子のないヘッダファイルが存在しているようで)
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 17:43
by J
VC持ってないんで違うかもしれませんが、
stringクラスは
#include <string>
ではなかったでしょうか?
見た感じでは
#include <cstring.h>
はC言語用のヘッダーファイルです。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 17:45
by こめかみ
返信ありがとうございます。
今から試して見ます。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 17:49
by たかぎ
使っている本がよくありませんね。Borland C++に強く依存している上に、内容が古すぎます。
C++の標準規格ができる前のBorland C++(Borland C++ Compilerではありません)には、<cstring.h>というヘッダがありました。
その中では、stringクラス(std::stringでもなければ、basic_string<char>のtypedef名でもない)が定義されていていたはずです。
# 確か、tolowerだったか、to_lowerだったかのメンバ関数もあったはずです。
いずれにしても、内容が古すぎて今では使えません。<cstring>は<string.h>に対応したものですので、<string>を使いましょう。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 17:51
by J
あ、それと直接は関係ないのですが、
main()
ではなく、
int main()
にすると良いでしょう。
return 0;
の0がおかしいことになってしまいます。
mainに戻り値が無いとOSに渡される終了コードが不定になってしまい、何かと不便なので。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 18:03
by こめかみ
".h"を外してみた結果、インクルードについてのエラーは出なくなったのですが。
1>------ ビルド開始: プロジェクト: 試験, 構成: Debug Win32 ------
1>コンパイルしています...
1>main.cpp
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(39) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(41) : error C2065: 'Cstring' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(41) : error C2146: 構文エラー : ';' が、識別子 's1' の前に必要です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(41) : error C3861: 's1': 識別子が見つかりませんでした
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(42) : error C2065: 'Cstring' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(42) : error C2146: 構文エラー : ';' が、識別子 's2' の前に必要です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(42) : error C3861: 's2': 識別子が見つかりませんでした
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(43) : error C2065: 'Cstring' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(43) : error C2146: 構文エラー : ';' が、識別子 's3' の前に必要です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(43) : error C2065: 's3' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(46) : error C2065: 's3' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(46) : error C2065: 's2' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(49) : error C2065: 's3' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(49) : error C2065: 's1' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(50) : error C2065: 'cout' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(50) : error C2065: 's3' : 定義されていない識別子です。
1>d:\ゲームプログラミングの館\試験\試験\main.cpp(50) : error C2065: 's1' : 定義されていない識別子です。
1>ビルドログは "file://d:\ゲームプログラミングの館\試験\試験\Debug\BuildLog.htm" に保存されました。
1>試験 - エラー 17、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
このようなエラーが出てヘッダ自体が意味を成して無いような感じです。
#include <string>でも同じでした。
>Jさん
>#include <cstring.h>
>はC言語用のヘッダーファイルです。
BCCではこれでいけました。cppファイルです。
int main()に直しました、気をつけます。
>たかぎさん
>使っている本がよくありませんね。Borland C++に強く依存している上に、内容が古すぎます。
>いずれにしても、内容が古すぎて今では使えません。
そうなんですか、せっかく買ったんですけどね。
C++の初心者向けに詳しい解説が載っていて現代の規格に準拠したお勧めの本やサイトを教えていただけないでしょうか。
うー、うまくいきません。
VC++でもうまくいくソースを教えていただけないでしょうか。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 18:11
by J
う~ん、おそらくだとは思いますが、
stringをstd::stringにするか
includeの後に
usingnamespace std;
としてみてください。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 18:11
by 御津凪
インクルード文の後に、
using namespace std;
を、入れるか、string を
std::string
と付け足すと直ると思います。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 18:13
by こめかみ
ありがとうございます。
早速やってみます。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 18:16
by 管理人
直接関係無い話ですが
>解決以外のアイコンが無くなってしまっているので
マークとアイコンは間違って使っている人が多く、
また、トピの内容は題名を見たらだいたいわかることから必要性があまりないと
判断したのでなくしました。
もし前の方がわかりやすかったと感じられる人が多ければ戻そうと思いますm(_ _)m
まぁ色々試してみようと思います。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 18:16
by J
すみません、御津凪さんの方の
using namespace std;
があってます。すみませんでした。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 18:27
by こめかみ
Jさん 御津凪さん ありがとうございました。
以下のソースコードでうまくいきました。
#include <string>
#include <iostream>
using namespace std;
int main()
{
//文字列を作成する.
string s1("Apple");
string s2("Orange");
string s3;
//文字列を代入する.
s3 = s2;
//文字列を比較する.
if(s3 > s1){
cout << s3 << "は" << s1 << "より大きい\n";
}
return 0;
}
参考書とかなり違いますね、無駄な買い物しちゃったのかな。
もしかして「C言語ポインタ完全制覇」もダメですかね?あーもっと下調べをちゃんとしとくんだったよぅ。
管理人さん
>また、トピの内容は題名を見たらだいたいわかることから必要性があまりないと
判断したのでなくしました。
確かにそうですね。関係ないですが緑色のデザインもいい感じです、季節で変えてるのでしょうか。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 19:06
by たかぎ
> もしかして「C言語ポインタ完全制覇」もダメですかね?
細部に関しては分かりませんが、特に問題はないと思います(読んでいないので推測ですが)。
ただし、C99に関する知識を得ようとしているのであれば、不適切な可能性はあります(これも推測)。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 19:30
by こめかみ
たかぎさんありがとうございます。
お金が無駄にならなかったのなら嬉しいです。
C99ってわからなかったので調べたのですが、1999年12月に制定されたのなら初版発行が平成13年1月25日なので多分大丈夫です(すいそく!)。
規格って何度も変わるんですね。
仕事にしている方は変わる度に覚え直してるのですか、大変だなー将来が怖いなーついていけるのかなー。
それともしよろしければ
C++の初心者向けに詳しい解説が載っていて現代の規格に準拠したお勧めの本
誰か教えてください。
サイトだけだと目が疲れるので書籍でじっくり読みたいのです。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 21:40
by たかぎ
> C99ってわからなかったので調べたのですが、1999年12月に制定されたのなら初版発行が平成13年1月25日なので多分大丈夫です(すいそく!)。
多分ダメだと思います。
> C++の初心者向けに詳しい解説が載っていて現代の規格に準拠したお勧めの本
ある程度Cが分かっているのであれば、『Accelerated C++―効率的なプログラミングのための新しい定跡』なんかが結構よかったりします。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 22:17
by こめかみ
たかぎさん直々にありがとうございます。
ある程度Cが分かっているか自信はありませんが仮に難しくてもCを学ぶモチベーションにはなると思うので買ってみます。
>多分ダメだと思います。
うう…一つ前の規格のポインタの概念って今のとそんなに違うのですか?
たびたびすみませんがCのポインタが詳しい本を教えていただけますでしょうか。
図解C言語 ポインタの極意 (単行本)
柴田 望洋 (著)
この本とかどうなんですかね、学校で使ってる教科書と同じ人の著書なのですが。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月01日(月) 23:23
by たかぎ
> うう…一つ前の規格のポインタの概念って今のとそんなに違うのですか?
ポインタの概念自体は変わりません。
> 図解C言語 ポインタの極意 (単行本)
悪くないと思います。
ただ、この手の本ばかり読むより、もう少し実践的な本も読んだ方がよいと思います。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月02日(火) 00:17
by こめかみ
>ポインタの概念自体は変わりません。
そうなのですか。
ポインタの理解を深めたくて買ったのでこの本で頑張ってみます。
もうちょっと調べてみました。C++のような機能がいくつか追加されたのがC99という認識でよいのでしょうか。
C99に興味を持ったときどのような書籍を入手すればいいのか教えていただけないでしょうか。
すぐ買うわけではないのですが多分しばらくしたら興味を持って手を出してみると思うので。
>ただ、この手の本ばかり読むより、もう少し実践的な本も読んだ方がよいと思います。
「この手の本」というのがよくわからないのですが、実践的な本というのは私の欲求に従うのならゲームを実際に作ってみる本だということになります。
私はネット上でちらほら公開されているゲームプログラミングのコンテンツが理解できるようになりたくて、基礎をもっと固めようと思い今頑張っています。
このサイトの管理人さんの龍神録の館も素晴らしく、これからも継続して利用させてもらい、模倣やアレンジをする気は満々なのですが、いかんせん開発スパンが長いのです。いろんなミニゲームを作ってみたいとも考えてる私は、まずテトリスを作ってみようと考え、下記のようなサイトで模倣を試みました。
ttp://codezine.jp/article/detail/207
ttp://www13.plala.or.jp/kymats/study/game_other/SPACE_TETRIS/st1.html
等。(アルゴリズムだけを理解すればDXライブラリでも作れそうですが、その試行錯誤の時間を龍神録の館に取り組む時間に割きたいと考えてしまします。)
しかし教科書にも載っていない見知らぬ知識が多すぎるので挫折し、
それでも理解できるようになろうとして、自分に足りなそうな内容の本を探しています。
息抜きに、必ず使うようになるであろう、と目の前の課題と直接は関係無いC++に手を付けてみたりもしています(シューティングゲーム作りに繋がるであろうという打算もあります)。
とりあえずポインタを深く理解したいと思っています。
ポインタに絡めてC言語のでのゲーム作りができるような本があれば最高なのですが。
実践的な本とはそういうことでしょうか。だとしてもどうやって探せばいいのでしょうか。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月02日(火) 08:47
by バグ
いきなり答えを求めずに、最終的な目標に辿りつくには何をすべきかを細かく分解して考えてみては如何でしょうか?
私は落ち物パズルが好きなので、テトリスを例に挙げさせていただきますが…
1:7種類のブロックが落ちてくる
2:横一列に隙間なく並べると消える
大雑把なルールはこれだけですよね。しかし、これをさらに突き詰めると…
1:7種類のブロックの作り方はどうしよう?
2:落ちてくるだけじゃない、左右にも動かせるようにしないと…どうしよう?
3:下・左・右へ移動する時に、単純に座標を移動させただけでは、既に存在しているブロックをすり抜けてしまう…どうしよう?
4:そういえば、回転もできるんだっけ…どうしよう?
5:横一列に並んだというのを認識するにはどうしよう?
なんていう問題に突き当たると思います。更に、ゲーム性を高めようと思ったら…
1:ブロックの落下速度を段々と上げたいよなぁ…
2:得点の表示も欲しいよなぁ…
もっと言えば、演出なんてのも…
1:消えるときに点滅させるとか、段々小さくなって消えるとか派手さが欲しいかも…どうやるんだ?
2:音楽も欲しいなぁ…どうやって音楽を鳴らすんだろう?
3:画面もカラフルで綺麗にしたいよなぁ…
本やネットの情報だけに頼るのではなく、とにかく色々なプログラムを書きまくって、自分が何を分かっていないかを理解する、というのが急務かなぁ…と思いますね。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月02日(火) 09:45
by たかぎ
> もうちょっと調べてみました。C++のような機能がいくつか追加されたのがC99という認識でよいのでしょうか。
C++から持ってきた機能は、インライン関数(実際には仕様がかなり異なる)、一行コメント、ブロック途中での宣言ぐらいです。
C99での最も大きな仕様変更は、ライブラリ、特に数学ライブラリの追加です。次に大きいのは、GCCの独自拡張機能を追認したことです。
> C99に興味を持ったときどのような書籍を入手すればいいのか教えていただけないでしょうか。
C90が十分分かっていれば、特に書籍は必要ではありませんが、『標準C言語辞典』ピアソン・エデュケーションがあれば重宝します。
> 「この手の本」というのがよくわからないのですが、実践的な本というのは私の欲求に従うのならゲームを実際に作ってみる本だということになります。
大体その認識であっています。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月02日(火) 11:31
by こめかみ
バグさんありがとうございます。
>本やネットの情報だけに頼るのではなく、とにかく色々なプログラムを書きまくって、自分が何を分かっていないかを理解する、というのが急務かなぁ…と思いますね。
既にある情報を理解できるようになるほうが今後にも繋がりそうでいいかな、という判断だったのですが、
試行錯誤こそがプログラミングの骨頂だとおっしゃるのなら何も見ないで頑張ってみようと思います。
テトリスのアドバイスありがとうございます、作ってみたいミニゲームは他にもいくつかあるのでどれが先になるかわかりませんが完成したら真っ先にここに持ってきます。
いきなり答えを求めずに、なおかつ気長になり過ぎないように頑張ってみようと思います。
たかぎさんありがとうございます。
C言語に辞典があるのですか、はじめて知りました。リファレンスとかはみたことありましたが。
なんか最強っぽい本ですね、ぜひ入手してみます。
>大体その認識であっています。
大体というのが気になりますが、わかりました。
いろいろ試してみます。
Re:【質問】VisualC++ExpressEdtionには標準クラスライブラリって無いのでしょうか?
Posted: 2008年9月02日(火) 13:24
by たかぎ
> C言語に辞典があるのですか、はじめて知りました。
『新ANSI C言語辞典』技術評論者の方が有名ですね。
『標準C言語辞典』は、『新ANSI C言語辞典』ほど厳密な記述はないので割とあっさりしています。
厳密な情報が欲しい場合には物足りないですが、そうでない場合は初級者~中級者でも読みやすいと思います。
なお、『新ANSI C言語辞典』にも間違いは少なからずあるので、本当に厳密な情報が欲しければ規格を調べるしかありません。
> 大体というのが気になりますが、
「ゲームを実際に作ってみる本」というのが、具体的にどんなものを想定しているのかによるということです。