友元类只能写在一个文件里吗?不可以写在多个文件里吗?

dxgzg 2020-02-16 05:59:44
#ifndef STRBLOB_H_INCLUDED
#define STRBLOB_H_INCLUDED
#include"dxgzg.h"

using namespace std;
class StrBlobPtr;
class StrBlob {
friend class StrBlobPtr;
private:
typedef string::size_type size_type;
shared_ptr<vector<string>>data;

bool check(size_type i){
if (i > 0)return true;
else return false;
return true;
}
public:
StrBlob():data(make_shared<vector<string>>()){}
StrBlob(initializer_list<string>s):data(make_shared<vector<string>>(s)){}
size_type size() {
return data->size();
}
size_type csize()const {
return data->size();
}
size_type psize(){
return data.use_count();
}
void push_back(const string &s){
data->emplace_back(s);
}
string front() {
if (check(data->size())) {
return *(data->begin());
}
}
string back() {
if (check(data->size())) {
return data->back();
}
}
bool empty() {
return data->empty();
}
void show() {
auto it = data->begin();
while (it != data->end()) {
cout << *it++ << ' ';
}
}
~StrBlob() {}

};
#endif;

这个是StrBlob类。

#ifndef STRBLOBPTR_H_INCLUDED
#define STRBLOBPTR_H_INCLUDED
#include"dxgzg.h"
#include"StrBlob.h"
using namespace std;
class StrBlob;
class StrBlobPtr {
size_t curr;
weak_ptr<vector<string>>wptr;
shared_ptr<vector<string>> check(size_t i) {
auto sptr = wptr.lock();//返回一个shared_ptr指针。
if (!sptr) {
throw runtime_error("当前容器已经失效");
}
if (i >= sptr->size()) {
throw runtime_error("溢出");
}
return sptr;
}
public:
StrBlobPtr() = default;
StrBlobPtr(StrBlob &s,size_t i):wptr(s.data){}
};
#endif

这个是StrBlobPtr,友元类是StrBlobPtr。

为什么在一个文件里,就可以访问StrBlob的私有成员,在两个文件里就不能访问呢?
...全文
221 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dxgzg 2020-02-16
  • 打赏
  • 举报
回复
引用 1 楼 真相重于对错 的回复:
没有问题。估计是你文件包含的问题。 ----------------------- 对于初学者一个建议,如果你要实现一个你没有做过的功能,一开始最好用最简单的代码验证一下,而不是一上来就堆砌一大堆,出了错误容易让人眼花缭乱。 计算机语言往往是由最简单的功能叠加为一个复杂的系统,例如递归。在理解它们时,一上来就把代码数量放大,会把自己绕晕。
嗯嗯,谢谢您的答复,功能我都知道,文件包含错误,那要怎么修改呀,我一直没改出来
真相重于对错 2020-02-16
  • 打赏
  • 举报
回复
没有问题。估计是你文件包含的问题。 ----------------------- 对于初学者一个建议,如果你要实现一个你没有做过的功能,一开始最好用最简单的代码验证一下,而不是一上来就堆砌一大堆,出了错误容易让人眼花缭乱。 计算机语言往往是由最简单的功能叠加为一个复杂的系统,例如递归。在理解它们时,一上来就把代码数量放大,会把自己绕晕。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧