为啥我对朋友函数有未定义的引用?

Posted

技术标签:

【中文标题】为啥我对朋友函数有未定义的引用?【英文标题】:Why do I have an undefined reference to friend function?为什么我对朋友函数有未定义的引用? 【发布时间】:2017-10-25 02:43:14 【问题描述】:

在我目前的编程课程中,我们正在编写一个程序来创建一个任意大小的随机填充数组。必须对包含数组的类进行模板化,以便可以用 int 值或 char 值填充数组。

此时,我要做的就是打印出 SafeArray 对象,以便确保我的代码正常工作。不幸的是,我在重载的流插入运算符 (

任何帮助将不胜感激。

这是我的班级声明:

#include <iostream>
#include <cassert>
#include <typeinfo>
#include <cstdlib>
#include <ctime>

using namespace std;

template <class T>
class SafeArray

private:
    T* pArr;
    int size;
    void create(int);
public:
    SafeArray();
    SafeArray(int);
    SafeArray(const SafeArray<T> &);
    ~SafeArray();

    SafeArray& operator=(const SafeArray<T> &);
    SafeArray operator+(SafeArray<T> &);
    SafeArray operator-(SafeArray<T> &);
    int& operator[](int);

    SafeArray& operator++();
    SafeArray operator++(int);
    int getSize() return size; 

    template <class U>  
    friend ostream& operator<<(ostream&, SafeArray<U> &);
    template <class V>
    friend istream& operator>>(istream&, SafeArray<V> &);
;

还有我的重载流插入定义:

template <class T>
ostream& operator<<(ostream& out, const SafeArray<T> & arr)

    for (int i = 0; i < arr.size; i++)
    
        out << arr[i] << " ";
    

    return out;

还有我的小主:

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

using namespace std;

int main()

    SafeArray<int> Safe(8);

    cout << Safe;

    return 0;

【问题讨论】:

你把算子函数定义放在哪里了? @user0042 在 SafeArray.cpp 中,它应该在 main 中吗?还是我需要在类头中定义它? Why can templates only be implemented in the header file?的可能重复 【参考方案1】:

友好声明与您的实际方法签名之间的常量差异?

友谊宣言:

模板 朋友 ostream& 运算符

实现:

模板 ostream& 运算符

【讨论】:

以上是关于为啥我对朋友函数有未定义的引用?的主要内容,如果未能解决你的问题,请参考以下文章

使用 NextJS 用 Class Components 和 getInitialProps 做 s-s-r,render 方法有未定义的数据

在构造函数中创建的外部向量

pytorch torch.empty()函数(返回填充有未初始化数据的张量。 张量的形状由可变的参数大小定义)

为啥我得到一个未定义的 pthread_create 引用? [复制]

头文件已经定义,但是在CPP文件中使用的话不能报错有未定义的字符

为啥调用 sqrt 函数报错显示未定义?