このプログラムをコンパイルしたとき(C++ Programming Language 4th editionから):
main.cpp
#include <stdafx.h>
#include <iostream>
#include <cmath>
#include "vector.h"
using namespace std;
double sqrt_sum(vector&);
int _tmain(int argc, _TCHAR* argv[])
{
vector v(6);
sqrt_sum(v);
return 0;
}
double sqrt_sum(vector& v)
{
double sum = 0;
for (int i = 0; i != v.size(); ++i)
sum += sqrt(v[i]);
return sum;
}
vector.cpp
#include <stdafx.h>
#include "vector.h"
vector::vector(int s)
:elem{ new double[s] }, sz{ s }
{
}
double& vector::operator[](int i)
{
return elem[i];
}
int vector::size()
{
return sz;
}
vector.h
#include <stdafx.h>
class vector{
public:
vector(int s);
double& operator[](int i);
int size();
private:
double* elem;
int sz;
};
これらのエラーが発生しました:
Microsoft Visual Studio 2013、Windows 7で実行します。修正方法を教えてください。
「stdafx.h」、つまりプリコンパイル済みヘッダーとは何かを適切に理解する必要があります。他の質問やウィキペディアがそれに答えます。多くの場合、特にプロジェクトが小さく、依存関係が少ない場合は、プリコンパイル済みヘッダーを回避できます。あなたの場合、おそらくテンプレートプロジェクトから始めたように、Windows.h
マクロにのみ_TCHAR
を含めるために使用されました。
次に、プリコンパイル済みヘッダーは通常、Visual Studioの世界ではプロジェクトごとのファイルです。したがって、
#include <stdafx.h>
を#include "stdafx.h"
に変更します。インクルードディレクトリで解決されるのではなく、プロジェクトのローカルファイルであることが想定されています。第二に、ライブラリとしてコードを使用できる他のソースの名前空間が乱雑にならないように、プリコンパイル済みヘッダーを独自のヘッダーに含めることはお勧めできません。したがって、vector.h
からの組み込みを完全に削除してください。
Stdfaxの代わりにwindows.hを含めるか、テンプレートなしでクリーンなプロジェクトを作成します。
それには2つの解決策があります。
ソリューション番号1:1。プロジェクトを再作成します。プロジェクトの作成中に、プリコンパイル済みヘッダーがチェックされていることを確認します(アプリケーション設定... ***空のプロジェクトはチェックしないでください)
ソリューション番号2:プロジェクトでstdafx.hおよびstdafx.cppを作成します2プロジェクトを右クリック->プロパティ-> C/C++->プリコンパイル済みヘッダー3.プリコンパイル済みヘッダーを選択して作成します(/ Yc)4.ソリューションを再構築します
問題が発生した場合は、メッセージを送ってください。
ソースファイルに#include "afxwin.h"
を追加します。それはあなたの問題を解決します。
この問題を修正するには、「$(ProjectDir)」(またはstdafx.hがある場所)をProject-> Properties-> Configuration Properties-> C/C++-> General-> Additional Include Directoriesの下のディレクトリのリストに追加します。