Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Aktualisiert: November 2007
Fehlermeldung
'Name': Abhängiger Name ist kein Typ
'name' : dependent name is not a type
Wenn ein abhängiger Name als Typ behandelt werden soll, ist das typename-Schlüsselwort erforderlich. Diese wichtige Änderung im Visual C++ .NET 2003-Compiler wurde vorgenommen, um Konformität mit dem ISO C++-Standard zu gewährleisten.
Weitere Informationen finden Sie unter Übersicht über die wichtigsten Änderungen bei der Kompilierzeit.
Bei Code, der in allen Versionen von Visual C++ die gleiche Funktionsweise hat, fügen Sie der Deklaration typename hinzu.
Im folgenden Beispiel wird C4346 generiert:
// C4346.cpp
// compile with: /WX /LD
template<class T>
struct C {
T::X* x; // C4346
// try the following line instead
// typename T::X* x;
};
Der folgende Code enthält weitere Beispiele, in denen das typename-Schlüsselwort erforderlich ist:
// C4346b.cpp
// compile with: /LD /W1
template<class T>
const typename T::X& f(typename T::Z* p); // Required in both places
template<class T, int N>
struct L{};
template<class T>
struct M : public L<typename T::Type, T::Value>
{ // required on type argument, not on non-type argument
typedef typename T::X Type;
Type f(); // OK: "Type" is a type-specifer
typename T::X g(); // typename required
operator typename T::Z(); // typename required
};
Und dieses:
// C4346c.cpp
// compile with: /LD /WX
struct Y {
typedef int Y_t;
};
template<class T>
struct A {
typedef Y A_t;
};
template<class T>
struct B {
typedef /*typename*/ A<T>::A_t B_t; // C4346 typename needed here
typedef /*typename*/ B_t::Y_t B_t2; // typename also needed here
};