C++ - Klasse hat kein Mitglied mit dem Namen 'blah'

Habe ich eine .h die Datei mit diesem an:

#ifndef CS240_LINKED_LIST_H
#define CS240_LINKED_LIST_H

#include <string>

//! LLNode implements a doubly-linked list node
class LLNode {
        friend class LinkedList;
    public:

        LLNode(const std::string & v, LLNode * p, LLNode * n) :
          value(v), prev(p), next(n)
        {
        }

    private:
        std::string value;        //!< value stored in the node
        LLNode * prev;            //!< pointer to previous node in the list
        LLNode * next;            //!< pointer to next node in the list
};


//! LinkedList implements a doubly-linked list
class LinkedList
{
    public:

        //!  No-arg constructor.  Initializes an empty linked list
        LinkedList();


        //!  Copy constructor.  Makes a complete copy of its argument
        LinkedList(const LinkedList & other);

    private:
        //!  two dummy nodes to keep track of the beginning and end of the list.
        LLnode beginning;
        LLnode end;
        int size;
};

#endif

In einer cpp-Datei, die ich habe:

#include "LinkedList.h"

LinkedList::LinkedList(){
    this->beginning.prev = NULL;
    this->beginning.next = this->end;
    this->end.prev = this->beginning;
    this->end.next = NULL;
}

Hier ist die Ausgabe:

>g++ -o LinkedList.o LinkedList.cpp
In file included from LinkedList.cpp:1:
LinkedList.h:37: error: 'LLnode' does not name a type
LinkedList.h:38: error: 'LLnode' does not name a type
LinkedList.cpp: In constructor 'LinkedList::LinkedList()':
LinkedList.cpp:4: error: 'class LinkedList' has no member named 'beginning'
LinkedList.cpp:5: error: 'class LinkedList' has no member named 'beginning'
LinkedList.cpp:5: error: 'class LinkedList' has no member named 'end'
LinkedList.cpp:6: error: 'class LinkedList' has no member named 'end'
LinkedList.cpp:6: error: 'class LinkedList' has no member named 'beginning'
LinkedList.cpp:7: error: 'class LinkedList' has no member named 'end'

Ich weiß nicht, wie dieses Problem zu beheben. Wie hätte ich sonst die anfangs-und end-Objekte? Nur damit Sie wissen, ich bin ein Java-Programmierer lernen C++.

  • Verwenden Sie nicht die NULL in C++, verwenden Sie 0 oder nullptr, falls dein compiler es unterstützen.
  • Wie haben Sie Ihre Anwendung kompilieren?
  • Das ist wirklich dein header ist? Sie müssen erklären, der Konstruktor in der Klassendefinition.
  • Hat Ihr real LinkedList.h deklarieren Konstruktor zu? Wenn nicht, dass kann das problem sein.
  • Deine Klasse Erklärung nicht deklarieren Sie einen Konstruktor -- müssen Sie tun, wenn Sie wollen, definieren Sie Ihren eigenen Konstruktor. Ich würde versuchen zu korrigieren, dass die ersten und sehen, was Sie erhalten.
  • Sorry an alle, ich dachte nur, ich würde schneiden Sie die meisten der Titel für den post. Ich habe den Konstruktor gibt. Ich bearbeitet die post mit mehr vollständige code
  • Warum ist 0 besser als NULL in C++? (Unter der Annahme, dass Sie noch nicht gegangen, um C++11 und nicht nullptr)
  • Gregory: ich habe bearbeitet den code, um mehr vollständig zu zeigen, was ich bin versucht zu kompilieren. Das problem ist nicht ein fehlender Konstruktor ist, sondern weil ich es Links aus dem post, jeder dachte, das war das problem.
  • Sie gehen zu müssen, um nach den genauen code, den Sie haben, da der code veröffentlicht würde nicht erzeugen diesen Fehler.
  • Übrigens, der Titel der Frage nicht mit der eigentlichen Fehlermeldung, die Sie bekommen. Der compiler ist nicht zu sagen Anfang/Ende ist nicht in einer Klasse. Es ist zu sagen, dass Sie nicht vorhanden sind, in diesem Umfang, als wenn Sie denken, dass Sie diejenigen sind, die als lokale funktionsvariablen (daher, warum das nicht der exakte code).
  • Buck: ich umgebucht der genaue Fehler, emittiert von der genauen code, den ich gepostet. Das problem ist im Grunde immer noch die gleichen. Der compiler kann nicht finden 'Anfang' oder 'Ende'.
  • Bailey NULL ist nicht immer verfügbar und ist hier für die Kompatibilität mit C. NULL ist auch ein makro entsprechend 0 oder 0L abhängig von der Implementierung. Also, wenn Sie eine einfache C++ - Datei ohne include überhaupt, NULL nicht erklärt werden. Es ist auch eine Geschichte von code-Stil, ob Sie gerne makro benutzen oder nicht.
  • NULL sollte verfügbar sein (wenn Sie es verwenden möchten), auch in einem minimalen frei stehenden C++ - Implementierung (aus <cstddef>). Wenn Sie es verwenden, dokumentieren Sie die Nullen, die Sie beabsichtigen zu sein, die null-Zeiger-Konstanten, und die sind nur Nullen. In der Theorie sollte diese den übergang zu nullptr einfacher. Ich bin damit einverstanden, dass 0 ist eine ganz gute null-Zeiger-Konstanten in C++, aber ich bin nicht einverstanden, dass es ist ein starkes argument zu verbieten, die mit NULL in C++.
  • Bailey habe ich nie gesagt NULL ist verboten, nur, dass Sie sollten verwenden Sie nullptr statt, oder 0, wenn es nicht verfügbar ist. NULL ist nur verfügbar, einschließlich durch cstddef zum Beispiel. In allen Fällen ist es besser, zu ermöglichen, C++0x / C++11-Unterstützung zu haben nullptr verfügbar
  • Sie sagte "nicht verwenden NULL in C++". Wenn das nicht für ein Verbot, ich weiß nicht, was ist. Ich bin immer noch nicht davon überzeugt, dass es alles andere als eine Sache des Stils oder der Konvention in C++03 code.
  • Es war wie gesagt ein Tipp, ich weiß nicht, ob der englische Imperativ verwendet werden könnte, wenn nicht sorry für die übersetzung-problem^^ (in Französisch es bedeutet)

InformationsquelleAutor Nate Glenn | 2011-09-24
Schreibe einen Kommentar