2017-09-03 4 views
0
//........Project for ABC.dll 
//ABC.h 
#pragma once 
class ABC{ 
public: 
    ABC(){} 
private: 
    std::vector<int> m_vector; 
}; 

//ABC.cpp 
#include "Stdafx.h" 
#include "ABC.h" 

//Stdafx.h 
#include <vector> 

今日まで、私はSTDAFX.Hヘッダにそれを委譲することによって、私のヘッダーに#include <standard-lib.h>をスキップしました。プリコンパイルヘッダの問題

私は1つのプロジェクトファイルで作業しても問題はありません。

今私は1つのプロジェクトで共有コードを収集するための新しいDLLプロジェクトを追加しようとしています。

コンパイル済みでABC.dllも生成されています。

ここに問題があります。 ABC.dllを使用する別のプロジェクトで、std::vectorが存在しないというコンパイルエラーが表示された場合。

//...........Another Project using ABC.dll 
int main(){ 
    ABC abc; 
} 

エラーC2039「ベクトルは」:それは働いて得るために

「STD」のメンバーではないですが、私はあまりにも消費者のSTDAFX.H内のすべてのライブラリを含める必要がありました。

おそらく、私はあらかじめコンパイルされたヘッダーを悪用しています。

PCHでやっているやり方が間違っているのか正しいのかを知りたい。

もしそれが間違っていたら、PCHを正しく使用することをお勧めします。

ありがとうございました。

+0

最後のスニペットには、#include がありません。これは、ABC.hをコンパイルするのに必要なものです。あなたはstdafx.hがそれを含んでいたので、これを前に気付かなかった。また、最初のスニペットの#includeは役に立つものではなく、すでに含まれています。これらのどれも、実際にプリコンパイルされたヘッダーとは関係ありません。 –

答えて

0

問題はプリコンパイル済みヘッダーとは関係ありません。現在のファイルで直接使用されているすべてのものを含めることをお勧めします。これにより、1つのヘッダーファイルのインクルードの変更が、このヘッダーを使用しているインクルードファイルの変更を潜在的に必要としないようになります。 はABC.hに含まれている必要があります。さもなければ、この特定のライブラリヘッダーを含めるときにどのヘッダーをインクルードする必要があるかを把握するために無限に苦労することになります。

+0

ありがとうございます。しかし、なぜ私はMSVCがABC.hに 'vector.h 'が含まれていないというDLLプロジェクトのエラーメッセージを表示していないのだろうと思っています。 –

+0

@JaeJunLEE 'ABC.cpp'は、' vector'を含む 'Stdafx.h'を含みます。 'ABC.h'は' vector'がインクルードされた後にのみインクルードされているので、あなたはその弾丸をかわすことができます。 – VTT

+0

私はそれを理解しています。答えてくれてありがとう。 –

関連する問題