Unbestimmte Anspielung auf

Lesezeit: 5 Minuten

Unbestimmte Anspielung auf
tpar44

Wenn ich meinen Code für eine verknüpfte Liste kompiliere, erhalte ich eine Reihe von undefinierten Referenzfehlern. Der Code ist unten. Ich habe mit diesen beiden Aussagen kompiliert:

g++ test.cpp 

ebenso gut wie

g++ LinearNode.h LinearNode.cpp LinkedList.h LinkedList.cpp test.cpp  

Ich verstehe wirklich nicht, warum ich diese Fehler bekomme, weil ich mit Klassen in C++ wirklich eingerostet bin. Ich könnte wirklich etwas Hilfe gebrauchen.

LinearNode.h:

#ifndef LINEARNODE_H
#define LINEARNODE_H
#include<iostream>

using namespace std;

class LinearNode
{
    public:
        //Constructor for the LinearNode class that takes no arguments 
        LinearNode();
        //Constructor for the LinearNode class that takes the element as an argument
        LinearNode(int el);
        //returns the next node in the set.
        LinearNode* getNext();
        //returns the previous node in the set
        LinearNode* getPrevious();
        //sets the next element in the set
        void setNext(LinearNode* node);
        //sets the previous element in the set
        void setPrevious(LinearNode* node);
        //sets the element of the node
        void setElement(int el);
        //gets the element of the node
        int getElement();

    private: 
        LinearNode* next;
        LinearNode* previous;
        int element;        
};//ends the LinearNode class

#endif

LinearNode.cpp:

#ifndef LINEARNODE_cpp
#define LINEARNODE_cpp
#include<iostream>
#include"LinearNode.h"

using namespace std;

//Constructor for LinearNode, sets next and element to initialized states
LinearNode::LinearNode()
{
    next = NULL;
    element = 0;
}//ends LinearNode default constructor

//Constructor for LinearNode takes an element as argument.
LinearNode::LinearNode(int el)
{
    next = NULL;
    previous = NULL;
    element = 0;
}//ends LinearNode constructor

//returns the next element in the structure
LinearNode* LinearNode::getNext()
{
    return next;
}//ends getNext function

//returns previous element in structure
LinearNode* LinearNode::getPrevious()
{
    return previous;
}//ends getPrevious function

//sets the next variable for the node
void LinearNode::setNext(LinearNode* node)
{
    next = node;
}//ends the setNext function

//sets previous for the node
void LinearNode::setPrevious(LinearNode* node)
{
    previous = node;
}//ends the setPrevious function

//returns element of the node
int LinearNode::getElement()
{
    return element;
}//ends the getelement function

//sets the element of the node
void LinearNode::setElement(int el)
{
    element = el;
}//ends the setElement function

#endif

LinkedList.h:

#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#include<iostream>
#include"LinearNode.h"

using namespace std;

class LinkedList
{
    public:
        LinkedList();
        void add(int element);
        int removie (int element);

    private:
        int count;
        LinearNode *contents;
};//ends the class linked list

#endif

LinkedList.cpp:

#ifndef LINKEDLIST_CPP
#define LINKEDLIST_CPP

#include<iostream>
#include"LinearNode.h"
#include"LinkedList.h"

using namespace std;

//linkedlist constructor for an empty linked list
LinkedList::LinkedList()
{
    count = 0;
    contents = NULL;
}//ends the constructor

//adds an element to the front of the linked list
void LinkedList::add(int element)
{
    int found = 0, current = 0;

    while( (found == 0) && (current !=count) )
    {
        if (contents.getElement() == element)
            found = 1;
        else    
        {
            contents = contents.getNext();
            current++;
        }//ends the else statement
    }//ends the while loop

    if (found == 0)
    {
        LinearNode node = new LinearNode(element);
        node.setNext(contents);
        contents.setPrevious(node);
        count++;
    }//ends the found == 0 if statment
}//ends the add function

//this function removes one element from the linked list.
int LinearNode::remove(int element)
{
    int found = 0;

    if (count == 0)
        cout << "The list is empty" << endl;
    else 
    {
        if (contents.getElement() == element)
        {
            result = contents.getElement();
            contents = contents.getNext();
        }//ends the contents.getElement() == element
        else 
        {
            previous = contents;
            current = contents.getNext();
            for (int index = 0; ( (index < count) && (found == 0) )index++)
                if (current.getElement() = element)
                    found = 1;
                else
                {
                    previous = current;
                    current = current.getNext();
                }//ends the else statement 

            if (found == 0)
                cout << "The element is not in the list" << endl;
            else
            {
                result = current.getElement();
                previous.setNext(current.getNext());
            }//ends else statement  

        }//ends the else stamtement

        count--;
    }//ends the else statement of count == 0
    return result;
}//ends the remove function

#endif

test.cpp:

#include<iostream>
#include"LinearNode.h"
#include"LinkedList.h"

using namespace std;

int main()
{

    LinearNode node1, node2, node3, move;
    LinkedList list;    

    node1.setElement(1);
    node2.setElement(2);
    node3.setElement(3);
}   

  • Zunächst einmal – geben Sie keine “.h”-Dateien als Parameter für den Compiler ein. Sie sind bereits in Ihren „.cpp“-Dateien enthalten. Was sind die fehlenden Referenzen? Was ist der Linker-Fehler, den Sie erhalten?

    – wenigadv

    13. März 11 um 22:58 Uhr


  • Ebenfalls, noch nie setzen using namespace std; in einer .h-Datei.

    – PaulR

    13. März 11 um 23:01 Uhr

  • Fügen Sie beim nächsten Mal auch die Fehlermeldungen ein.

    – Karl Philipp

    13. März 11 um 23:12 Uhr

  • Ich hatte ein ähnliches Problem mit dem Abrufen der undefined reference to Fehler, stellt sich heraus, dass ich vergessen habe, die einzufügen .cpp mit Code in der .h.

    – Avamander

    30. August 17 um 22:30 Uhr


  • @Avamander Das ist der falsche Weg. Sie fügen Ihre Header-Dateien ein (d. h. .h) in Ihren Quelldateien (d. h. .cpp), nicht umgekehrt.

    – Stapelschutz

    10. Juni 20 um 12:15 Uhr

  1. Normalerweise sind Header-Wächter für Header-Dateien (d. h. .h ) nicht für Quelldateien (d. h. .cpp ).
  2. Fügen Sie die erforderlichen Standardheader und Namespaces in die Quelldateien ein.

LinearNode.h:

#ifndef LINEARNODE_H
#define LINEARNODE_H

class LinearNode
{
    // .....
};

#endif

LinearNode.cpp:

#include "LinearNode.h"
#include <iostream>
using namespace std;
// And now the definitions

LinkedList.h:

#ifndef LINKEDLIST_H
#define LINKEDLIST_H

class LinearNode; // Forward Declaration
class LinkedList
{
    // ...
};

#endif

LinkedList.cpp

#include "LinearNode.h"
#include "LinkedList.h"
#include <iostream>
using namespace std;

// Definitions

test.cpp Die Quelldatei ist in Ordnung. Beachten Sie, dass Header-Dateien niemals kompiliert werden. Angenommen, alle Dateien befinden sich in einem einzigen Ordner –

g++ LinearNode.cpp LinkedList.cpp test.cpp -o exe.out

  • jetzt können die include guards durch just ersetzt werden #pragma once am Anfang der Datei

    – Jean-Francois Fabre

    10. Oktober 19 um 19:33 Uhr

g++ test.cpp LinearNode.cpp LinkedList.cpp -o test

  • Dadurch werden generierte Linker-Abhängigkeiten gelöst Undefined Reference to Fehler. Dies funktioniert jedoch nur, wenn sich alle Dateien im selben Verzeichnis befinden.

    – Karl Philipp

    13. März 11 um 23:09 Uhr


Ich habe diesen Fehler erhalten, weil meine cpp-Dateien nicht in der Datei CMakeLists.txt hinzugefügt wurden

Eine andere Möglichkeit, diesen Fehler zu erhalten, besteht darin, die Definition von etwas versehentlich in einen anonymen Namensraum zu schreiben:

foo.h:

namespace foo {
    void bar();
}

foo.cc:

namespace foo {
    namespace {  // wrong
        void bar() { cout << "hello"; };
    }
}

andere.cc-Datei:

#include "foo.h"

void baz() {
    foo::bar();
}

Ich hatte dieses Problem, als ich vergessen hatte, die neue .h/.c-Datei, die ich erstellt habe, dem Meson-Rezept hinzuzufügen, also ist dies nur eine freundliche Erinnerung.

Unbestimmte Anspielung auf
MUKESH KUMAR BADIGINENI

Versuchen Sie, den Konstruktor und die Destruktoren zu entfernen, es funktioniert für mich ….

.

509420cookie-checkUnbestimmte Anspielung auf

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy