有两个模板类后代和一个友元函数:
header.h 文件
#pragma once
using namespace std;
template <typename T>
class _list : public list<T> {
public:
friend void fill_int(int);
};
template <typename T>
class _vector : public vector<T> {
public:
friend void fill_int(int);
};
template <typename T>
void fill_int(int num) {
while (num) {
this->push_back(rand() % 128);
num--;
}
}
main.cpp 文件
#include <iostream>
#include <vector>
#include <list>
#include "header.h"
using namespace std;
int main() {
_list<int> lint;
lint.fill_int(7); // <<<<<<< here
return 0;
}
作为朋友的功能被移动到两个类中都可用。拒绝工作。他说:
错误 C2039 fill_int:不是“_list”的成员
正确的是 - 你说你在那里有一个函数可以访问你的类的内部。不再。
既然你想在不同的类中使用它,那么你需要向它传递一个类对象,比如
并且不使用 as
lint.fill_int(7);
,而是 asfill_int(lint,7);
。让它变得友好是没有意义的——因为它
push_back
是一个公共成员(我希望你没有把它设为私有/受保护?)。然而 - 为什么你有你的列表和矢量 - 模板?
既然您正在
push_back(int)
做并且int
明确规定,那么您的容器中有什么这样的模板?...您不需要添加自己的此类函数,因为标准库有足够的容器算法。例如,您的功能与以下内容相同: