Compilerwarnung (Fehler) C4597

Nicht definiertes Verhalten: offsetof Wird auf einen Member einer virtuellen Basis angewendet.

Die offsetof(T, m) Verwendung von , m wobei auf einen statischen Daten member oder eine Memberfunktion verweist, führt zu C4597.

Hinweise

Diese Warnung ist neu in Visual Studio 2017 Version 15.3. Sie wird standardmäßig als Fehler gemeldet. Informationen zum Deaktivieren von Warnungen nach Compilerversion finden Sie unter Compilerwarnungen nach Compilerversion.

Beispiel

Der folgende Code generiert den Fehler „C4597“:

#include <cstddef>

struct A {
   int ten() { return 10; }
   static constexpr int two = 2;
};

constexpr auto off = offsetof(A, ten);  // C4597: undefined behavior: offsetof applied to member function 'A::ten'
constexpr auto off2 = offsetof(A, two); // C4597: undefined behavior: offsetof applied to static data member 'A::two'

Dieser Code ist falsch formatiert und kann möglicherweise zur Laufzeit einen Absturz verursachen. Um den Fehler zu beheben, ändern Sie den Code: Rufen offsetof Sie nicht für Memberfunktionen oder statische Datenmitglieder auf. Dies ist nicht portierbarer Code, der vom C++-Standard nicht zugelassen ist.