C ++ - Fehler C2653 'Class' ist kein Klassen- oder Namespacename

8

Guten Tag. Ich habe angefangen, C ++ zu lernen, und ich habe und kompiliere mein Projekt. Wenn Sie einen fehlerhaften Code finden, würde ich mich freuen, wenn Sie es mir sagen.

Ich habe folgende Definitionen:

Utils.h

%Vor%

Utils.cpp

%Vor%

und

Ping.h

%Vor%

Ping.cpp

%Vor%

Wenn ich das Projekt kompiliere, bekomme ich:

Fehler 1 Fehler C2653: 'Ping': ist kein Klassen- oder Namespace-Name c: \ users \ claderasm \ Dokumente \ Visual Studio 2010 \ projects \ landetestconsole \ landecplusconsole \ ping.cpp 14 1 LandecplusConsole

Ich habe gelesen, dass dieser Fehler manchmal ausgelöst wird, weil Sie "stdafx.h" nicht einschließen auf der ersten #include, aber ich habe es bereits geändert.

Wenn Sie mir etwas mehr erzählen könnten, würde ich mich freuen

    
Carlos Landeras 07.11.2012, 16:26
quelle

1 Antwort

7

Ich konnte Ihren Fehler nicht mit dem von Ihnen angegebenen Code reproduzieren, aber ich habe versucht VS2008 und einige der Warnungen, die er ausgelöst hat, lassen mich glauben, dass es sehr wahrscheinlich daran liegt, dass Ihr vorkompilierter Header nicht in Quellen enthalten ist. Und es gibt ein paar andere Probleme, die ich sehen kann, die Ihnen später Probleme bereiten werden:

  • Vorkompilierten Header nicht in .h einschließen. (Sie sollten sogar vermeiden, etwas in Ihre .h aufzunehmen, es sei denn, dies ist absolut notwendig). Der vorkompilierte Header (zumindest in visueller Art und Weise, Dinge zu tun) soll zuerst in jeder cpp-Datei enthalten sein (nicht .h). Wenn Sie dies nicht tun, wird es Warnungen für jedes Include auslösen, das Sie mögen:

    warning C4627 : '#include "Ping.h"': Übersprungen, wenn nach vorkompilierten Header gesucht wird & lt; - hier ist Ihre Point-Klasse nicht mehr definiert!

    und schließlich ein Fehler fataler Fehler C1010 : unerwartetes Ende der Datei beim Suchen nach vorkompiliertem Header. Hast du vergessen, '#include "stdafx.h"' zu deiner Quelle hinzuzufügen ?.

    Es sind tatsächlich Nachrichten, die ich bekomme, wenn ich deinen Code auf VS2008 kompiliere, vielleicht hast du bei VS2010 deinen Fehler, dass Point nicht zusätzlich zu diesen definiert wird. Beim Sortieren vorkompilierter Header-Probleme kompiliert es sich gut (siehe nächster Punkt)

  • Die Verwendung eines vorkompilierten Headers bedeutet nicht, dass das zum Erstellen verwendete Header automatisch in allen Quellen enthalten ist. Um dies zu tun, müssen Sie einige Projekteinstellungen ändern: Rechtsklick auf Ihr Projekt - & gt; Eigenschaften erweitern Sie im linken Bereich Konfigurationseigenschaften - & gt; C / C ++ - & gt; Erweitert Hier in der Liste auf der rechten Seite sollten Sie Force Includes sehen. Geben Sie hier stdafx.h und voilà ein, Sie müssen es nicht manuell in jede neue .cpp-Datei einfügen, die Sie Ihrem Projekt hinzufügen. Beachten Sie, dass Sie dies für alle Konfigurationen tun müssen (Kombinationsfeld oben auf "Konfiguration: Aktiv (Debug)"

  • )

Entschuldigung, immer noch ein VS2008 Bildschirm, hoffe, es ist das gleiche auf VS2010

  • Schützen Sie Ihre Kopfzeilen . Sie sollten Ihre Kopfzeilen mit Punkten versehen, um Mehrfachdefinitionen Ihrer Klassen zu vermeiden, wenn mehrere Include-Instanzen desselben H auftreten (und dies auch tun). Sie können es auf zwei Arten tun: die Methode define und die Methode pragma once. Das Pragma ist einmal nicht Standard, aber kompiliert schneller auf Visual, so dass Sie schließlich die 2 Möglichkeiten mischen können.

myheader.h Pragma einmal verwenden:

%Vor%

myheader.h verwendet definiert:

%Vor%

myheader.h mit beiden:

%Vor%
  • Es wurde bereits gesagt, aber vermeiden Sie die Verwendung von "using" in Kopfzeilen , weil es sich ausbreiten wird. Ich selbst vermeide den Gebrauch von "using" überall.
Chris R. 08.11.2012, 07:00
quelle

Tags und Links