• 締切済み

フレンド関数を利用したオーバーロードでコンパイルエラー

独習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だとバグで起こってしまうとのことですが、この状態からコンパイルエラーを無くすには何をしたらよいのでしょうか?

みんなの回答

回答No.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/downloads/sp/VS6SP6.aspx

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

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

noname#102223
質問者

補足

こんな感じです。 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 スキップ ==========

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.2

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

noname#102223
質問者

補足

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

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

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

noname#102223
質問者

補足

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

関連するQ&A