2017-09-03 2 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> 

Bis heute habe ich #include <standard-lib.h> in meine Header übersprungen, indem es Stdafx.h Header zu delegieren.vorkompilierte Header Probleme

Es war nie ein Problem, wenn ich in einer einzigen Projektdatei arbeitete.

Jetzt versuche ich ein neues DLL-Projekt hinzufügen, um gemeinsame Codes in einem Projekt zu sammeln.

Es kompiliert gut und generiert auch ABC.dll.

Hier ist ein Problem. Wenn ein anderes Projekt, das ABC.dll verwendet, Compile-Fehler anzeigen, der besagt, dass std::vector nicht vorhanden ist.

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

Fehler C2039 'Vektor': kein Mitglied von 'std' ist

Um es funktioniert, habe ich die Bibliotheken aller Einrichtungen in der Verbraucher zu Stdafx.h musste schließen .

Vielleicht habe ich den vorkompilierten Header missbraucht.

Ich möchte wissen, ob die Art und Weise, die ich mit dem PCH gemacht habe falsch oder richtig war.

Wenn es falsch ist, würde ich es begrüßen, wenn Sie richtige Wege zur Verwendung von PCH vorschlagen.

Danke.

+0

Das letzte Snippet fehlt '#include '. Welche benötigt wird, um die ABC.h kompilieren zu lassen. Du hast das nie zuvor bemerkt, weil stdafx.h es enthielt. Beachten Sie auch, dass das # include für Vektor im ersten Snippet nichts nützliches tut, es war bereits enthalten. Nichts davon * hat * etwas mit vorkompilierten Headern zu tun. –

Antwort

0

Ihre Probleme haben nichts mit vorkompilierten Headern zu tun. Eine gute Übung ist es, all die Sachen einzuschließen, die direkt von der aktuellen Datei verwendet werden. Dadurch wird verhindert, dass Änderungen an Includes einer Headerdatei Änderungen in Includes in Dateien erforderlich machen, die diesen Header verwenden. vector muss in ABC.h enthalten sein, weil es dort direkt verwendet wird. Andernfalls werden Sie endlos kämpfen, um herauszufinden, welche Header enthalten sein müssen, wenn diese bestimmte Bibliothek Header enthalten.

+0

Danke. Aber ich wundere mich, warum MSVC keine Fehlermeldung im DLL-Projekt über die fehlende Aufnahme von 'vector.h' in ABC.h zeigte. –

+0

@JaeJunLEE 'ABC.cpp' enthält' Stdafx.h', das 'vector' enthält. Beachten Sie, dass 'ABC.h' nur enthalten ist, nachdem' vector' enthalten ist, so dass Sie der Kugel ausweichen konnten. – VTT

+0

Ok ich verstehe es. Danke für die Antwort. –

Verwandte Themen