プロが教える店舗&オフィスのセキュリティ対策術

独習C++(第3版)で学習していますが、書籍通りに入力してもコンパイルエラーが出てしまい、困っております。

P.199 6.5.フレンド演算子関数の使用にあるソースコードをそのままコピーしただけです。

フレンド関数を利用し、演算子オーバーロードをすると、コンパイルエラーが発生してしまうようです。

(10):friend coord operator+(coord ob1,int i);

C:\jsp\tools\samp13\XXXX.cpp(10) : fatal error C1001: 内部コンパイラ エラー
(コンパイラ ファイル 'msc1.cpp', 行番号 1786)
Visual C++ のサポート情報 コマンドを選択してください
ヘルプ メニュー、 またはサポート情報のヘルプ ファイルを参照してください

少し検索したところVC++6.0だとバグで起こってしまうとのことですが、この状態からコンパイルエラーを無くすには何をしたらよいのでしょうか?

A 回答 (4件)

 こんにちは。



>>少し検索したところVC++6.0だとバグで起こってしまうとのことですが、この状態からコンパイルエラーを無くすには何をしたらよいのでしょうか?
 クラスの中に直接書くか、inline関数として外に書くしか無い様です。

 struct coord
 {
  friend coord operator + (coord ob1, int i);
  {
   return ob1.??? + i;
  }
 };

 又はfriendを外してヘッダに書く

 inline coord operator + (coord ob1, int i);
 {
  return ob1.??? + i;
 }

>>ディレクティブを 'stdafx.h' に追加するか、プリコンパイル済みヘッダーをビルドし直します
 stdafx.hをクリックして、ヘッダを開き、

 // TODO: プログラムに必要な追加ヘッダーをここで参照して下さい。

 とコメントされている付近に#include<iostream>と書いて見て下さい。
 それでも駄目であった場合は、ソリューションごとクリーンしてビルドし直して見て下さい。

 VC60も使用する事があるのなら、MicroSoftのホームページから、VC60用のサービスパックをダウンロードしておく事をお勧めします。
 最新はSP6です。
 SP5ではインラインアセンブラでmmx/sse命令を書くことが出来る様になっています。しかし、SP6ではc++のテンプレートパラメータの問題の一部が改善された反面、mmx/sse命令が使えなくなってしまいました。
 どちらを選ぶかは、質問者様次第です。
 http://www.microsoft.com/japan/msdn/vstudio/down …
    • good
    • 0

ちょっと待て.


「#include<iostream> でコンパイルエラーが出る」って書いてあるけど, 正確にどのようなエラーか書けますか?

この回答への補足

こんな感じです。
VC++2008ExpressEdition自体使用が初めてです。

------ ビルド開始: プロジェクト: XXXX, 構成: Debug Win32 ------
コンパイルしています...
XXXX.cpp
.\XXXX.cpp(1) : warning C4627: '#include <iostream>': プリコンパイル済みヘッダーの使用を検索中にスキップされました
ディレクティブを 'stdafx.h' に追加するか、プリコンパイル済みヘッダーをビルドし直します
.\XXXX.cpp(46) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか?
ビルドログは "file://c:\Users\TXX-PN034\Documents\Visual Studio 2008\Projects\XXXX\XXXX\Debug\BuildLog.htm" に保存されました。
XXXX - エラー 1、警告 1
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

補足日時:2009/01/27 16:54
    • good
    • 0

> 何かアップデート等で直す事はできないのでしょうか?


少し検索すれば分かるとおもいますが、
VC6はもう10年以上前の古いコンパイラです。
マイクロソフトはその後継版を既に無償で提供しています。
最新は、Visual Studio 2008 でVC9と呼ばれています。

この回答への補足

Visual Studio 2008は入れてあるんですが、
VC6.0とは操作方法が異なるみたいでよくわからないんですよね・・
そのままソースコピペしてコンパイルすると、

#include<iostream>

でコンパイルエラーが出るほどですし・・・

補足日時:2009/01/27 15:36
    • good
    • 0

> 少し検索したところVC++6.0だとバグで起こってしまうとのことですが、この状態からコンパイルエラーを無くすには何をしたらよいのでしょうか?



バグの無いコンパイラに変えるのが一番簡単な方法です。

この回答への補足

それがわからないので困ってます
何かアップデート等で直す事はできないのでしょうか?

補足日時:2009/01/27 15:12
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!