1

以下のコードをコンパイルするとg++ main.cpp functions.cpp -o run、エラーが発生しますerror: ‘vector’ does not name a type。通常、先頭で名前空間を宣言すると、main.cppすべての.cppファイルで機能します。

main.cpp

using namespace std;

#include "functions.h"

main () {}

関数.h

#include <vector>

関数.cpp

#include "functions.h"
vector <int> x;

編集:すべての応答者が自分の話していることを知っているという事実に感謝しますが、これは通常私にとってはうまくいきます。メイクファイルの使用はそれと関係がありますか? 私が見逃しているかもしれない何か他のものはありますか?

4

4 に答える 4

10

はい、しかし、あなたはそれを に書いただけなので、この例でfunctions.cppは見られませんでした。using namespace stdmain.cpp


using namespace stdに追加しないで、型を修飾するためfunctions.hに使用します。std::を追加するusing..と、ヘッダーのユーザーに不必要な負担がかかります。

于 2012-08-28T11:25:37.397 に答える
8

名前空間を修飾する必要があります。

#include "functions.h"
std::vector<int> x;

に があり、using namespace stdからmain.cppは見えませんfunctions.cpp。それが問題の根源です。

using namespace std一般に、特にヘッダーでは を避ける必要があります。本当に に含める必要がある場合はmain、すべてのヘッダーの後に配置します。

于 2012-08-28T11:25:47.833 に答える
3

std名前空間を にのみインポートし、にはインポートしmain.cppませんでしたfunctions.cpp

std::vector2 番目のファイルで使用を修飾するか、次のusingディレクティブを使用する必要があります。

//functions.cpp
#include "functions.h"
std::vector <int> x;   // preferred

また

//functions.cpp
#include "functions.h"
using namespace std;
vector <int> x;

または(ボーナス)

//functions.cpp
#include "functions.h"
using std::vector;
vector <int> x;

main.cpp の先頭で名前空間を宣言すると、通常、すべての .cpp ファイルで機能します。

あなたは本当に欠陥のあるコンパイラを持っています。usingディレクティブは、ディレクティブを直接参照できない翻訳単位に影響を与えるべきではありません。

于 2012-08-28T11:25:23.160 に答える
1

あなたusing namespace stdは main.cpp に対してのみローカルです。使用する必要があります

 std::vector<int> x;

ソースファイル functions.cpp に

于 2012-08-28T11:26:35.737 に答える