【发布时间】:2023-03-24 18:22:01
【问题描述】:
这应该是一个带有一堆运算符和函数的字符串类,包括两个友元函数。这两个给我带来了一些麻烦,因为编译器说他们不能访问私有成员。这是我的 string.h:
#include <iostream>
#ifndef STR_H
#define STR_H
namespace MyStr
{
class Str
{
private:
unsigned int length;
char *data;
public:
Str();
Str(const Str&);
Str(const char*);
Str(char c, unsigned int db);
~Str();
char* cStr() const;
unsigned int getLength() const;
这里有很多不相关的功能......
friend int operator/ (const Str&, char);
friend std::ostream& operator<< (std::ostream&, const Str&);
};
}
#endif /* STR_H */
这里是main.cpp:
#include <iostream>
#include "Str.h"
using namespace std;
using namespace MyStr;
ostream& operator<< (ostream& out,const Str& str)
{
for (int i=0; i<str.length; i++)
{
out<<str.data[i];
}
out<<endl;
return out;
}
int operator/ (const Str& str, char c)
{
for (int i=0; i<str.length; i++)
{
if(str.data[i]==c) return i;
}
return -1;
}
此代码无法编译,编译器声称 Str 成员是私有的。
【问题讨论】:
-
你遇到了什么错误?
-
错误:'char* MyStr::Str::data' 是私有的|错误:'unsigned int MyStr::Str::length' 是私有的|
-
它在哪一行发出该错误?两种功能都适用吗?
-
Str.h|10|错误:'unsigned int MyStr::Str::length' 是私有的|两种功能。当函数尝试访问私有成员时会发生这些错误,如下所示:
-
你对友元函数的定义和声明在不同的命名空间中。
标签: c++ operator-overloading friend