Fehler beim kompilieren in Eclipse: ld: symbol(s) not found for architecture x86_64
Ich nur wieder zurück zur Arbeit mit C++, nachdem eine lange Zeit. Ich verwende Eclipse auf einem Macbook Pro, und ich habe versucht, mal ein kleines Projekt von verketteten Listen.
Habe ich immer diese Fehlermeldung, wenn ich versuche zu kompilieren meines Projekts:
ld: symbol(s) not found for architecture x86_64
Dies geschieht nur, wenn ich #include "SingleLinkedList.h"
in meinem main.cpp und tun Sie Tätigkeiten im Zusammenhang mit SingleLinkedist
, sonst entfernen die oben SingleLinkedList im main, das Projekt kompiliert Geldstrafen. Ich Suche schon ähnliche Fragen auf, SO mit dem gleichen Fehler, aber keiner scheint zu haben, half mir lösen diese.
Hier sind die class-Dateien, wenn nötig:
Soweit ich mich erinnere, früher alles in der gleichen Weise verwendet, um gut funktionieren zu Eclipse. Ich habe nur ein Upgrade auf Lion einige Zeit zurück, und installiert das neue Xcode und eine neue Eclispe, und jetzt wurde vor seltsame Probleme, anstatt sich auf die Codierung.
SingleLinkedList.cpp
#include "SingleLinkedList.h"
template<class T>
SingleLinkedList<T>::~SingleLinkedList()
{
Node<T> *temp = head;
while(head!=0)
{
temp = head;
head = temp->next;
delete temp;
}
}
template <class T>
void SingleLinkedList<T>::addToHead(int item)
{
head = new Node<T>(item, head);
if (tail==0)
tail = head;
}
template <class T>
void SingleLinkedList<T>::addToTail(int item)
{
if(tail!=0)
{
tail->next = new Node<T>(item);
tail = tail->next;
}
else
head = tail = new Node<T>(item);
}
template <class T>
int SingleLinkedList<T>::deletefromHead()
{
int e1 = head->info;
Node<T> *temp = head;
if(head ==tail)
{
head = tail = 0;
}
else
head = temp->next;
delete temp;
return e1;
}
template <class T>
int SingleLinkedList<T>::deletefromTail()
{
int e1 = tail->info;
if(head == tail)
{
delete head;
head = tail = 0;
}
else{
Node<T> *temp = head;
while(temp->next != tail)
temp = temp->next;
delete tail;
tail = temp;
tail->next = 0;
}
return e1;
}
template <class T>
void SingleLinkedList<T>::deleteNode(int item)
{
if(head!=0) {
if(head == tail && head->info){ //If this is the only item in the linked list
delete head;
head = tail = 0;
}
else if (item == head->info){
Node<T> *temp = head;
head = temp->next;
delete temp;
}
else{
Node<T> *temp = head;
while(temp->next->info != item && temp->next !=0 ){
temp = temp->next;
}
if(temp!=0){
temp->next = temp->next->next;
temp = temp->next;
delete temp;
}
}
}
}
template <class T>
bool SingleLinkedList<T>::isEmpty()
{
return head == 0;
}
template <class T>
bool SingleLinkedList<T>::isInList(int item)const
{
Node<T> * temp = head;
while(temp!=0)
{
if(temp->info == item){
break;
}
temp = temp->next;
}
return temp->info == item;
}
template<class T>
SingleLinkedList<T>::SingleLinkedList()
{
head = tail = 0;
}
SingleLinkedList.h
#include "Node.h"
#ifndef SINGLELINKEDLIST_H_
#define SINGLELINKEDLIST_H_
template <class T>
class SingleLinkedList {
public:
SingleLinkedList();
~SingleLinkedList();
bool isEmpty();
bool isInList(int)const;
void addToHead(int);
void addToTail(int);
int deletefromHead();
int deletefromTail();
void deleteNode(int);
private:
Node<T> *head;
Node<T> *tail;
};
#endif /* SINGLELINKEDLIST_H_ */
main.cpp
#include <iostream>
#include "SingleLinkedList.h"
using namespace std;
int main() {
SingleLinkedList<int> listfile;
listfile.addToHead(2);
listfile.addToHead(4);
listfile.addToHead(6);
listfile.addToHead(8);
listfile.addToHead(10);
return 0;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich der Grund, warum dies nicht funktioniert ist, weil Sie nicht definieren header-Dateien für template-Klassen, mit separater Implementierung, da die Vorlagen keine Umsetzung anderes als das, was der compiler generiert. Es ist also falsch, c++ zu haben .cpp-Datei. Setzen Sie alle inline-oder halten Sie es in nur der header. finden Sie unter den folgenden ganz unten
Müssen Sie sicherstellen, dass Sie in den build-Pfad so, dass eclipse kennt, zu verknüpfen .cpp-Datei, um den rest der binären. Gehen Sie zu Projekt -> Eigenschaften -> c++ general -> Pfade und Symbole -> Quelle Standort, und Sie sollten in der Lage sein, um es von dort aus. Wenn Sie wieder bauen, stellen Sie sicher, dass die .cpp-Datei enthält die Implementierung wird gebaut, indem man die build.
Hinzufügen Ihre Quelle nicht wirklich viel helfen, wenn Sie nicht die gesamte build-log, nur sagen.
includes
option hier. i.imgur.com/ornFi.pngincludes
durch die Suche in den top Suchmaschinen box auch.cstdef
in meinem Unterricht und es hat mirUnresolved cstdef
Fehler.src
wo .cpp-Datei ist. Screenshot: i.imgur.com/aYo6Q.png bu ich bin noch immer der Fehler. Auch ich habe in der build-log. Link zur Ansicht: pastebin.com/WFyb6SZL Selbst nach all dies, ich bin nicht sicher, ob das das problem da ich früher noch nicht' konfiguriert ist, eine solche Sache früher mit Eclipse beim kompilieren meines Codes. Irgendwelche Vorschläge, die ich versuchen könnte?SingleLinkedList
Teil in meinem main.cpp