c – 模板类的友元函数中的链接错误

c – 模板类的友元函数中的链接错误,第1张

概述我有模板类节点,为了遵循 copy-and-swap惯用法,我尝试编写交换函数,这是类Node的朋友 我的代码是: Node.h #ifndef NODE_H#define NODE_H#include<memory>template<typename type>class Node{ type data_; std::unique_ptr<Node> next_;p 我有模板类节点,为了遵循 copy-and-swap惯用法,我尝试编写交换函数,这是类Node的朋友

我的代码是:

Node.h

#ifndef NODE_H#define NODE_H#include<memory>template<typename type>class Node{    type data_;    std::unique_ptr<Node> next_;public:    Node(type data);    Node(const Node& other);    Node& operator=(Node other);    frIEnd voID swap(Node& lhs,Node& rhs);};#include "Node.tpp"#endif

和Node.tpp

template<typename type>Node<type>::Node(type data):data_(data),next_(nullptr){}template<typename type>Node<type>::Node(const Node& other){    data_ = other.data_;    next_ = nullptr;    if(other.next_ != nullptr)    {        next_.reset(new Node(other.next_->data_));    }}template<typename type>voID swap(Node<type>& lhs,Node<type>& rhs){    using std::swap;    swap(lhs.data_,rhs.data_);    swap(lhs.next_,rhs.next_);}template<typename type>Node<type>& Node<type>::operator=(Node other){    swap(*this,other);    return *this;}

当我从Source.cpp测试它

#include "Node.h"int main(){    Node<int> n(3);    Node<int> n2(n);    Node<int> n3(5);    n3 = n2;}

我收到以下链接错误

LNK2019: unresolved external symbol "voID __cdecl swap(class Node<int> &,class Node<int> &)
解决方法 友元声明不“继承”模板参数,但需要自己的:

template<typename type>class Node{    // ...public:    // ...    template<typename U> // <<<<<<<<<<<    frIEnd voID swap(Node<U>& lhs,Node<U>& rhs);                      // ^^^           ^^^    // ...};
总结

以上是内存溢出为你收集整理的c – 模板类的友元函数中的链接错误全部内容,希望文章能够帮你解决c – 模板类的友元函数中的链接错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228441.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存