Warum ist MSVC10 ignoriert meine #pragma warning(disable: 4251)?
Also das 4251 Warnung ist eine seriöse Basis zumindest die microsoft-compiler. Im wesentlichen, jedes mal, wenn Sie eine template-Klasse oder-nicht-dllexport Klasse überall in der header-definition, erhalten Sie diese Warnung. Besser noch, es gibt zahlreiche Klassen in der stl (wie Karte), wo Sie auch nicht loszuwerden, diese Fehler, Punkt.
Mein problem ist, ist, dass für eine bestimmte Klasse, die "#pragma warning(disable: 4251)" nur flat-out nicht funktioniert. Es funktioniert sonst überall, aber hier.
DelWestInspectionProgram.cpp
#include "stdafx.h"
#pragma warning(disable: 4251)
...
Output Log:
E:\svn\VisionNow\VisionSuite\VI.Inspector.ImageProcessing.Common\BIImage.h(79): warning C4251: 'BIImage::_data' : class 'boost::shared_array<T>' needs to have dll-interface to be used by clients of class 'BIImage'
6> with
6> [
6> T=unsigned char
6> ]
6>E:\svn\VisionNow\VisionSuite\VI.Inspector.ImageProcessing.Operators\BIImageOperator.h(25): warning C4251: 'BIImageOperator::_savePath' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'BIImageOperator'
6> with
6> [
6> _Elem=char,
6> _Traits=std::char_traits<char>,
6> _Ax=std::allocator<char>
6> ]
Jegliche Hilfe würde sehr geschätzt werden.
- Haben Sie die #pragma-in der header-Datei, die die Ursache der Warnung? Auch, wenn die header-Datei wird vorkompiliert werden, müssen Sie möglicherweise erstellen Sie den vorkompilierten header.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus meiner eigenen Erfahrung gibt es zwei Probleme: wenn ist eine DLL importieren und wenn Sie eine DLL-export.
Wo ist die dllexport, Microsoft scheint zu ignorieren, die #pragma-Warnung, aber das ist nur das eine Projekt so einfach in den compiler-Einstellungen, um diese Warnung ignorieren. Ich fand, wenn man es Microsoft nicht warnen.
Wo ist die dllimport, d.h. die Datei mit dem header. Ich fand es von Microsoft nicht ignorieren, die pragma-und nicht warnen, so dass es in beiden Orten wird das Problem lösen.
Meine Vermutung ist, dass der 79 Projekte, die unterdrücken der Warnung Ordnung sind diejenigen, die die sind nicht die DLL selbst.
Soweit ich weiß, einige Fehler können nicht deaktiviert werden. So ist es mit den Linker. Von daher würde ich davon ausgehen, es ist die gleiche Weise mit einigen compiler auch. Aber im Allgemeinen würde ich legte es in Ihre stdafx.h-Datei, oder zumindest bevor es. Setzen Sie nach nicht garantieren, dass alles, vor allem, da wir nicht den code sehen.
[BEARBEITEN]
Auf der anderen Seite, das ist eine ernste Warnung, die ich beheben würde, wenn ich du wäre und es einfach nicht ignorieren. Wenn Sie suchen, hier auf stack overflow finden Sie einige großartige Diskussionen darüber, warum es ein problem ist.
#include "stdafx.h"
werden ignoriert. Am besten platzieren Sie es am Anfang stdafx.h selbst.