C++について。
現在”猫でもわかるプログラミング”のC++編をSDKと共に勉強している身です。
現在第22章、第23章を勉強中です。
22章 http://www.kumei.ne.jp/c_lang/cpp/cpp_22.htm
23章 http://www.kumei.ne.jp/c_lang/cpp/cpp_23.htm
作業環境はVisual Studio 2005.net C++です
22章でのプログラムを作成し、実行した結果エラーが出てしまいました。
ソースです
#include <iostream>
class xy_position
{
int x;
int y;
public:
xy_position(int x = 0, int y = 0){
xy_position::x = x;
xy_position::y = y;
}
int X() const {return x;}
int Y() const {return y;}
};
ostream& operator << (ostream& o, const xy_position& p)
{
return o << "(" << p.X() << "," << p.Y() << ")";
}
int main(void)
{
xy_position a(50, 60), b;
std::cout << a << b << std::endl;
return 0;
}
(17):error C2143: 構文エラー : ';' が '&' の前にありません。
(17):error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
(17):error C2065: 'o' : 定義されていない識別子です。
(17):error C2059: 構文エラー : 'const'
(18):error C2143: 構文エラー : ';' が '{' の前にありません。
(18):error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
(26):error C2679: 二項演算子 '<<' : 型 'xy_position' の右オペランドを扱う演算子が見つかりません (または変換できません)。
このようなエラーが出てしまいました。
もちろんソースは全て同様に書いています。
この”猫でも”で使用しているコンパイラと異なるために出たエラーでしょうか?
それに単に cout << のように記述するとエラーが出てしまい、 std::cout << のように記述しなければ通りません。
また、エラーとは別の質問になってしまいますが、プログラム中に int X() const {return x;} という記述がありますが、このconstの意味が分かりません。 単純に return x が変更不可能という意味でしょうか?
次に23章についての質問です。
ここでもソースは同じなのに以下のようなエラーが出てしまいます。
ソースです。
#include <iostream>
int main(void)
{
int x=10, y=15, z=20;
std::cout << "16進表示" << std::endl;
std::cout.setf(ios::hex);
std::cout << x << std::endl;
std::cout << y << std::endl;
std::cout << z << std::endl;
std::cout.unsetf(iostream::hex);
std::cout << "8進数" << std::endl;
std::cout.setf(ios::oct);
std::cout << x << std::endl;
std::cout << y << std::endl;
std::cout << z << std::endl;
return 0;
}
(8):error C2653: 'ios' : 識別子がクラス名でも名前空間名でもありません。
(8):error C2065: 'hex' : 定義されていない識別子です。
(13):error C2653: 'iostream' : 識別子がクラス名でも名前空間名でもありません。
(15):error C2653: 'ios' : 識別子がクラス名でも名前空間名でもありません。
(15):error C2065: 'oct' : 定義されていない識別子です。
これも何か設定をしなければいけないのでしょうか?
なにぶんC++は・・・というかオブジェクト指向の言語は初心者なもので疑問も多いですorz
お礼
回答ありがとうございます。文字列の場合ヒープじゃなくてテキストセグメントに保存されるのではなかったでしたっけ?