Xcode,运算符<<未知错误

用户9366862

我花了很多时间试图修复这个错误:

Undefined symbols for architecture x86_64:
  "operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, SingleLinkedLists<int>&)", referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我不确定问题是什么。我发现有人在使用 Xcode 时遇到了类似的问题,我尝试按照他们的步骤进行操作,但似乎没有任何效果。我也刚刚更新了 Xcode,但它也没有解决我的问题。这是我的代码:

#ifndef SingleLinkedLists_h
#define SingleLinkedLists_h

#include <iostream>

template <class T>
class SingleLinkedLists {
private:

    struct Node {
        T data;
        Node* next;
    };
    Node* head;
    Node* tail;

public:
    // Constructors
    SingleLinkedLists() : head(nullptr), tail(nullptr) {}
    SingleLinkedLists(SingleLinkedLists const& value);
    ~SingleLinkedLists();

    // Overloaded operators
    SingleLinkedLists& operator=(SingleLinkedLists const& rhs);
    friend std::ostream& operator<<(std::ostream& str, SingleLinkedLists& data);

    // Operators in Single Linked List
    void swap(SingleLinkedLists& other) noexcept;
    void createNode(const T& theData);
    void createNode(T&& theData);
    void display() const;
    void insertHead(const T& theData);
    void insertPosition(int pos, const T& theData);
    void deleteHead();
    void deleteTail();
    void deletePosition(int pos);
    bool search(const T& x);
};

template <class T>
SingleLinkedLists<T>::SingleLinkedLists(SingleLinkedLists const& value) : head(nullptr), tail(nullptr) {
    for(Node* loop = value->head; loop != nullptr; loop = loop->next) {
        createNode(loop->data);
    }
}

template <class T>
SingleLinkedLists<T>::~SingleLinkedLists() {
    while(head != nullptr)
        deleteHead();
}

template <class T>
SingleLinkedLists<T>& SingleLinkedLists<T>::operator=(SingleLinkedLists const& rhs) {
    SingleLinkedLists copy(rhs);
    swap(copy);
}

template <class T>
std::ostream&  operator<<(std::ostream& str, SingleLinkedLists<T>& data) {
    data.display(str);
    return str;
}

template <class T>
void SingleLinkedLists<T>::swap(SingleLinkedLists& other) noexcept {
    using std::swap;
    swap(head, other.head);
    swap(tail, other.tail);
}

template <class T>
void SingleLinkedLists<T>::createNode(const T& theData) {
    Node* temp = new Node;
    temp->data = theData;
    temp->next = nullptr;

    if(head != nullptr) {
        temp = head;
        temp = tail;
        temp = nullptr;
    }
    else {
        temp->next = tail;
        temp = tail;
    }
}

template <class T>
void SingleLinkedLists<T>::createNode(T&& theData) {
    Node* temp = new Node;
    temp->data = std::move(theData);
    temp->next = nullptr;

    if(head != nullptr) {
        temp = head;
        temp = tail;
        temp = nullptr;
    }
    else {
        temp->next = tail;
        temp = tail;
    }
}

template <class T>
void SingleLinkedLists<T>::display() const {
    for(Node* loop = head; head != nullptr; loop = loop->next) {
        std::cout << loop->data << "\t";
    }
}

template <class T>
void SingleLinkedLists<T>::insertHead(const T &theData) {
    Node* temp = new Node;
    temp->data = theData;
    temp->next = head;
    head = temp;
}

template <class T>
void SingleLinkedLists<T>::deleteHead() {
    Node* old = head;
    head = head->next;
    delete old;
}


#endif /* SingleLinkedLists_h */

这是 main.cpp 文件:

#include <iostream>
#include "SingleLinkedLists.h"

int main(int argc, const char * argv[]) {

    SingleLinkedLists<int> obj;
    obj.createNode(2);
    obj.createNode(4);
    obj.createNode(6);
    obj.createNode(8);
    obj.createNode(10);
    std::cout<<"\n--------------------------------------------------\n";
    std::cout<<"---------------Displaying All nodes---------------";
    std::cout<<"\n--------------------------------------------------\n";
    std::cout << obj << std::endl;

//    std::cout<<"\n--------------------------------------------------\n";
//    std::cout<<"-----------------Inserting At End-----------------";
//    std::cout<<"\n--------------------------------------------------\n";
//    obj.createNode(55);
//    std::cout << obj << std::endl;
//    
//    std::cout<<"\n--------------------------------------------------\n";
//    std::cout<<"----------------Inserting At Start----------------";
//    std::cout<<"\n--------------------------------------------------\n";
//    obj.insert_start(50);
//    std::cout << obj << std::endl;
//    
//    std::cout<<"\n--------------------------------------------------\n";
//    std::cout<<"-------------Inserting At Particular--------------";
//    std::cout<<"\n--------------------------------------------------\n";
//    obj.insert_position(5,60);
//    std::cout << obj << std::endl;
//    
//    std::cout<<"\n--------------------------------------------------\n";
//    std::cout<<"----------------Deleting At Start-----------------";
//    std::cout<<"\n--------------------------------------------------\n";
//    obj.delete_first();
//    std::cout << obj << std::endl;
//    
//    std::cout<<"\n--------------------------------------------------\n";
//    std::cout<<"----------------Deleting At End-----------------";
//    std::cout<<"\n--------------------------------------------------\n";
//    obj.delete_last();
//    std::cout << obj << std::endl;
//    
//    
//    std::cout<<"\n--------------------------------------------------\n";
//    std::cout<<"--------------Deleting At Particular--------------";
//    std::cout<<"\n--------------------------------------------------\n";
//    obj.delete_position(4);
//    std::cout << obj << std::endl;
//    std::cout << std::endl;
//    
//    obj.search(8) ? std::cout << "Yes" << std::endl : std::cout << "No" << std::endl;


    return 0;
}
阿列克谢·乌萨乔夫

您需要添加运算符重载的前向声明:

template<class T> class SingleLinkedLists;
template<class T> std::ostream& operator << (std::ostream& o, const SingleLinkedLists <T>& x);

然后在您的类定义中添加<>之后operator <<覆盖所有模板:

//...
friend std::ostream& operator<< <>(std::ostream& str, const SingleLinkedLists<T>& data);
//...

您的方法声明将如下所示:

template <class T>
std::ostream&  operator<< (std::ostream& str, const SingleLinkedLists<T>& data) {
    // Some additional stuff 
    return str;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

错误:运算符不存在:数值〜*未知

来自分类Dev

Mongo 错误:聚合的“未知顶级运算符:$completed_on”

来自分类Dev

MongoDB:未知运算符 $and

来自分类Dev

运算符重载<<错误

来自分类Dev

运算符重载错误?

来自分类Dev

MongoDB:$或运算符错误

来自分类Dev

运算符重载错误?

来自分类Dev

MongoDB:$或运算符错误

来自分类Dev

错误运算符<<重载-未找到运算符

来自分类Dev

MongoError未知的组运算符

来自分类Dev

MongoError未知的顶级运算符:$ set

来自分类Dev

mongo BadValue未知运算符:$ or

来自分类Dev

C#中的未知运算符

来自分类Dev

MongoError未知的组运算符

来自分类Dev

Mongo:未知组运算符 $toDouble

来自分类Dev

即使写入了转换运算符,也会出现“未知转换”错误

来自分类Dev

Mongodb-错误的查询:BadValue未知的顶级运算符:$ gte

来自分类Dev

ActionView :: Template :: Error(PG :: UndefinedFunction:错误:运算符不存在:整数~~未知

来自分类Dev

Pouchdb查找+ Cloudant:错误:未知运算符“ 0”-应该是以下之一

来自分类Dev

Xcode中的未知错误

来自分类Dev

XCode中的C ++错误:定义运算符*“没有可行的重载运算符* =“,而* =已经过测试并且可以正常运行

来自分类Dev

缺少运算符或分号错误

来自分类Dev

没有新运算符的错误

来自分类Dev

mongodb位置运算符错误

来自分类Dev

Ada“ =”运算符重载错误

来自分类Dev

数组错误指针的增量运算符?

来自分类Dev

<< C ++中的运算符重载错误

来自分类Dev

Revit语句中的运算符错误

来自分类Dev

加等于运算符错误