提问人:Dane Wind 提问时间:10/25/2017 最后编辑:Dane Wind 更新时间:10/25/2017 访问量:1514
为什么我对友元函数的引用未定义?
Why do I have an undefined reference to friend function?
问:
在我目前的编程课程中,我们正在编写一个程序来创建一个任意大小的随机填充数组。必须对包含数组的类进行模板化处理,以便可以使用 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;
}
答:
1赞
sandwood
10/25/2017
#1
友情声明与您的实际方法签名之间的恒定性差异?
友好声明 :
模板
好友 ostream& operator<<(ostream&, SafeArray &);
实现:
模板 ostream& 运算符<<(ostream& out, const SafeArray & arr);
上一个:为什么模板只能在头文件中实现?
下一个:为什么模板只能在头文件中实现?
评论