Klasse hat kein Mitglied benannt
Ich habe ein problem mit dem Zugriff auf eine Funktion aus einer Klasse mit dem class-Objekt in meinem main
Funktion. Ich bin nur versuchen, machen das Objekt für die Klasse, und verwenden Sie dieses Objekt, um Zugriff auf die Funktion im inneren, die Klasse .cpp
- Datei. Ich bekomme immer eine Fehlermeldung und ich sogar das einfachste Programm, um es zu testen und ich bekomme immer noch eine Fehlermeldung.
Main:
#include <iostream>
#include "Attack.h"
using namespace std;
int main()
{
Attack attackObj;
attackObj.printShiz();
}
Header-Klasse:
#ifndef ATTACK_H
#define ATTACK_H
class Attack
{
public:
Attack();
void printShiz();
protected:
private:
};
#endif //ATTACK_H
Klasse .cpp:
#include <iostream>
#include "Attack.h"
using namespace std;
Attack::Attack() {
}
void Attack::printShiz() {
cout << "Test" << endl;
}
Wie behebe ich diesen Fehler? Jedesmal, wenn ich versuche, auf die printShiz()
Funktion in der Attack
Klasse mit einem Objekt in meinem main
Funktion, bekomme ich eine Fehlermeldung und es funktioniert nicht, dass diese Funktion existiert in dieser Klasse.
Fehler:
Fehler: 'class Attack' has no member named 'printShiz'
- Der code sieht gut aus. Vielleicht ist es versucht, eine ältere version des headers.
- Manchmal ist ein "Rebuild All" alles in Ordnung.
- Habe es gerade ausprobiert, immer der gleiche Fehler :/
- Sollten Sie post einige code, der das problem reproduziert. Der code, den Sie geschrieben gut aussieht.
- schlage vor, 2 : Kopie printShiz() und ersetzen Sie alle mit kopiert. manchmal ist das, was es geschrieben ist scheint gleich, aber wenn Sie ändern ANsi auf notepad++ sehen Sie, dass unter code ist anders. passieren, wenn Sie wechseln viel zwischen den Tastatur-layouts
- Das problem muss mit Ihrem include-Pfad, Verzeichnisse/Dateinamen etc.. Welche compiler verwenden Sie? Wenn z.B. GCC, dann kann man mit "g++ -E main.cc <-anderen-sind-etc - >" um proprocessor-Stufen-Ausgang, das zeigen wird, wenn der header, die Sie erwarten, wird eingebaut richtig in der übersetzungseinheit.
- Ich benutze Codeblocks mit dem standard-GNU-GCC-Compiler, die es mit kam. Ich habe gerade mit Programmieren angefangen, also ich weiß nicht zu viel über das, was falsch ist.
- würden Sie mir bitte den genauen Befehl, den Sie verwenden, um Ihren code kompilieren? Ich habe Angst, dass Sie nicht verknüpfen-Klasse.o-Objekt mit dem code richtig.
- Ich bin wirklich neu auf dem ganzen coding-Sache, also ich weiß nicht genau, was du meinst mit dem Befehl. Ich weiß, dass ich mit Codeblocks mit dem GNU GCC Compiler. Wenn ich die compiler-Einstellungen unter " toolchain executables, sagt es, dass der C++ compiler mingw32-g++.exe
- öffnen Sie ein terminal und die Hexe zu Ihrem Programm-Ordner und dann diesen Befehl ausgeben:
mingw32-g++.exe main.cpp class.cpp -o main.exe
dann versuchen zu laufenmain.exe
- Wie mache ich das? Wie gesagt ich bin SEHR neu zu Programmieren. Ich habe gerade angefangen ein paar Tagen. Ich will einfach nur, um zu beheben, was falsch ist, so kann ich gehen zurück, um zu lernen, wie man code.
- welche windows version verwenden Sie?
- Ich bin derzeit mit Windows 7
- gut gehe zu start -> ausführen -> Typ cmd.exe und geben Sie dann Folgen Sie meinen vorherigen Kommentar.
- Ich navigierte zu den Programm-Ordner und den Befehl eingegeben genau und bekam eine Antwort: "'ming32-g++.exe " nicht erkannt wird als Befehl interne oder externe, betriebsbereiten Programm oder batch-Datei."
- so finden Sie
mingw32-g++.exe
und verwenden Sie den absoluten Pfad zum Aufruf (wiec:\some\folder\mingw32-g++.exe main.cpp class.cpp -o main.exe
) - Da du sagst Sie sind neu in der Programmierung lassen Sie mich Ihnen einen Vorschlag, immer auch Ihre eigenen Header (siehe Ihre main.cpp), so dass Sie stellen Sie sicher, dass Sie alles, was Sie in anderen Dateien. Dein Beispiel ist ganz gut, es ist nur ein Vorschlag!
- Vielen Dank für die Beratung! Mein Aktuelles problem ist momentan hält mich von der Programmierung und ich habe keine Ahnung, warum es passiert so, ich bin irgendwie deprimiert aus. Hoffentlich wird dieses problem bald behoben sein
- Sie können auch testen Sie Ihren code hier: compileonline.com/compile_cpp_online.php
- Bitte bewegen Sie erweiterte Diskussionen zu Stack-Overflow-Chat. Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte ein ähnliches problem. Es stellte sich heraus, ich war mit einer alte header-Datei mit dem gleichen Namen aus einem alten Ordner. Ich löschte die alte Datei verändert die #include-Direktive zu zeigen, um meine neue Datei und alles war gut.
Meisten der Zeit, ist das problem durch einige Fehler auf der menschlichen Seite. In meinem Fall war ich mit einigen Klassen, deren Namen ähnlich sind. Ich habe die empty () - Methode unter einem Klasse; aber, mein code war dem Aufruf der empty () - Methode aus einer anderen Klasse. In diesem moment ist der Geist steckte. Ich lief sauber machen, und neu zu denken, das war eine ältere version der header verwendet habe. Nach einem Spaziergang für einen moment Weg, ich fand das problem sofort. Wir Programmierer neigt dazu, anderen die Schuld zuerst. Vielleicht sollten wir darauf bestehen, uns falsch zu sein ersten.
Irgendwann, ich habe vergessen zu schreiben das neueste update auf der Festplatte und suchen Sie die richtige version von dem code, aber der compiler ist zu sehen, dass die falsche version von dem code. Dies ist weniger ein Problem auf IDE (ich verwende vi zu tun coding).
Haben Sie denken Sie daran, die schließende Klammer in main?
Versuchen zu definieren, die Funktionen des rechts in der Kopfzeile
und zu kompilieren. Wenn der compiler nicht meckern über doppelte Definitionen es bedeutet, dass Sie vergaß zu kompilieren Class.cpp Datei, dann müssen Sie einfach, es zu tun (fügen Sie es zu Ihrem Makefile/Projekt/Projektmappe... welche toolchain benutzt du?)
Ich weiß, das ist ein Jahr alt, aber ich kam gerade über Sie mit dem gleichen problem. Mein problem war, dass ich nicht über einen Konstruktor verfügen, in meiner Implementierung Datei. Ich denke, das problem hier könnte werden die Kommentarzeichen am Ende der header-Datei nach dem #endif...
Haben Sie einen Tippfehler in Ihrer .h? Einmal kam ich über diese Fehlermeldung, wenn ich die Methode richtig aufgerufen, in meine main, aber mit einem Tippfehler in der .h/.cpp (ein "g" gegen ein "f" in den Namen der Methode, die es ein bisschen schwierig zu erkennen).
Es fällt unter die "copy/paste-Fehler" - Kategorie.