現在”猫でもわかるプログラミング”の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
No.3ベストアンサー
- 回答日時:
★過去にも同じような質問がありました。
・同じカテゴリで『const』キーワードで検索すると見つかったので紹介します。
http://oshiete1.goo.ne.jp/qa1135537.html→『クラスの実装のconst』
http://oshiete1.goo.ne.jp/qa2756332.html→『C++ iteator const を使ったプログラムがコンパイルできない』
・あと C++ については、『猫でもわかるプログラミング』よりも下の参考リンクも読んだ方が
理解しやすいと思います。
参考リンク:
・http://www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html→『C++入門』
・http://www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html→『C++入門』
・http://www.cmagazine.jp/src/kinjite/cpp/index.html→『プログラミングの禁じ手Web版 C++編』
返答ありがとうございました。
constについての参考サイト、またこれからC++を学ぶに当たり参考になるサイトを紹介いただきありがとうございました。
C++入門・・・・参考にあげていただいたサイトのほうが学びやすいですね。 コンパイラ関係で、ソースが違ってくるようなこともなさそうです。
ありがとうございました。参考にさせてもらいます。
No.2
- 回答日時:
ostream,ios,iostreamの前にもstd::を付けてください。
例、ostream → std::ostream
あるいは、includeディレクティブのあとに
using namespace std;
という一行を入れてください。
この場合、他の"std::"も要らなくなります。
#include <iostream.h>
と
#include <iostream>
ではC++として別物になります。
前者は古い(規格が曖昧な頃の)書き方で、現在では後者が正しい記述になります。
No.1
- 回答日時:
最近の正しいC++標準では、std::の名前空間を指定する必要がありますが、
猫が書かれた当時は、書かずに動く処理系(古いVC等)が使われており、
このようなことがおきます。(猫のサイトにも説明があります)
iosやhex、iostreamなどは全て、std::ios、std::hex、std::iostreamでなければならず、
ゆえにエラーになっています。
地道にstd::をつけるのも一手。
横着するならincludeの後くらいに
using namespace std;
と書く手もあります。
(但し、むやみにこれを書くのはお勧めしません。勉強でちょっと使う分にはありだと思いますけど)
> また、エラーとは別の質問になってしまいますが、
いいえ。
1.そのメンバ関数ではクラスのメンバを変更しない。
2.そのメンバ関数は、constなインスタンスに対して呼び出せる
の両方の意味を包含します。
丁寧に解説いただきありがとうございました。
stdとios, hexなどの解説や、最後のconstの意味まで教えていただき感謝します^^
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
switch文のエラーについて
-
空ENTERの判別
-
std::wstringのメモリリークに...
-
構文エラーが出ているのですが...
-
LinuxのQtに関する質問です。
-
コーディング
-
リモートデスクトップの接続元I...
-
CStringとString
-
gccでコンパイル時のエラー
-
Visial C++おけるπの使い方
-
2重の(?)の#include
-
なぜ、C++の標準ヘッダをインク...
-
_tcscat がうまくいきません(V...
-
uniqueの使い方について
-
C++ 文字列とポインタ、STL::ma...
-
【C++】ヘッダ内でstringを格納...
-
C++ std::threadを引数で受け取...
-
#include "fstream.h"
-
C++でShowCursorを使いたい。
-
C言語の漢字のホルダーは、chdi...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
switch文のエラーについて
-
構文エラーが出ているのですが...
-
なぜ、C++の標準ヘッダをインク...
-
gccでコンパイル時のエラー
-
空ENTERの判別
-
【C++】ヘッダ内でstringを格納...
-
snprintfが使用できない。
-
enumの値から定義名を文字列化...
-
#include "fstream.h"
-
C++で、テキストファイルを一行...
-
std::wstringのメモリリークに...
-
C++での <iostream.h>と<iostre...
-
VC++で文字列から任意の文字を...
-
#defineの使い方について
-
wstringの主力
-
vc++の使い方について
-
std::map の const 修飾について
-
string型のフォーマット書式指...
-
構造体配列のvectorへの変換と...
-
指定した文字を削除したい
おすすめ情報