다음을 통해 공유


컴파일러 경고(수준 2) C4275

non - DLL 인터페이스 클래스 'class_1'가 DLL 인터페이스 클래스 'class_2'의 기반으로 사용됩니다.

내보낸 클래스는 내보내지 않은 클래스에서 파생되었습니다.

__declspec(dllexport)를 사용하여 클래스를 내보낼 때 데이터 손상 가능성을 최소화하려면 다음을 확인합니다.

  • 모든 정적 데이터는 DLL에서 내보낸 함수를 통해 액세스됩니다.

  • 클래스의 인라인 메서드는 정적 데이터를 수정할 수 없습니다.

  • 클래스의 인라인 메서드는 정적 데이터를 사용하는 CRT 함수 또는 기타 라이브러리 함수를 사용하지 않습니다.

  • 인라인 클래스 함수는 정적 데이터에 액세스하는 CRT 함수 또는 기타 라이브러리 함수를 사용하지 않습니다.

  • 인라인 처리에 관계없이 클래스의 메서드는 EXE 및 DLL의 인스턴스화에 정적 데이터 차이가 있는 형식을 사용할 수 없습니다.

가상 함수를 사용하여 클래스를 정의하는 DLL과 형식의 개체를 인스턴스화하고 삭제하기 위해 호출할 수 있는 함수를 정의하여 클래스를 내보내지 않도록 할 수 있습니다. 그런 다음, 형식에서 가상 함수를 호출할 수 있습니다.

C++ 표준 라이브러리의 형식에서 파생되어 디버그 릴리스(/MTd)를 컴파일하고 컴파일러 오류 메시지가 참조되는 경우 Visual C++에서 C4275를 무시할 수 있습니다 _Container_base.

// C4275.cpp
// compile with: /EHsc /MTd /W2 /c
#include <vector>
using namespace std;
class Node;
class __declspec(dllimport) VecWrapper : vector<Node *> {};   // C4275