![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
現在”猫でもわかるプログラミング”の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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++で、テキストファイルを一行...
-
2重の(?)の#include
-
メモリーリークの検出について
-
テンプレート関数に関して質問...
-
wstringの内容を表示させたい
-
#include "fstream.h"
-
STLのwstring型から BSTR型 へ...
-
C++ basic_ostreamの拡張
-
std::wstringのメモリリークに...
-
なぜ、C++の標準ヘッダをインク...
-
using namespace std;//?
-
c++で日本語を処理したい
-
コーディング
-
C言語 ストリームについて。
-
C++ iteator const を使ったプ...
-
C++について。
-
コマンドライン引数を使って2進...
-
乱数と配列
-
C++で行列とベクトルの積を求める
-
iostream インクルード時に発生...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラーが出ているのですが...
-
switch文のエラーについて
-
enumの値から定義名を文字列化...
-
VC++で文字列から任意の文字を...
-
なぜ、C++の標準ヘッダをインク...
-
空ENTERの判別
-
std::wstringのメモリリークに...
-
C言語からgnuplot呼び出し
-
リモートデスクトップの接続元I...
-
JPEGやPNGが読めるLoadImage関数
-
このプログラミング誰か教えて...
-
プログラミング
-
#include "fstream.h"
-
C++での <iostream.h>と<iostre...
-
std::map の const 修飾について
-
構造体配列のvectorへの変換と...
-
#defineの使い方について
-
VS2019でofstreamが未定義になる
-
指定した文字を削除したい
-
構造体に決められた文字列を入...
おすすめ情報