永发信息网

VS2013下友元函数无法访问类私有成员

答案:2  悬赏:60  手机版
解决时间 2021-01-26 13:42
  • 提问者网友:战魂
  • 2021-01-25 20:12
//string.h -- flawed string class definition
#ifndef STRNG_H_
#define STRNG_H_
#include
using std::istream;
using std::ostream;
class String
{
char * str;
int len;
static int num_strings;
static const int CINLIM = 80;
public:
......
friend bool operator < (const String & st, const String & st2);
friend bool operator > (const String & st, const String & st2);
friend bool operator == (const String & st, const String & st2);
friend ostream & operator << (ostream & os, const String & st);
friend istream & operator >> (istream & is, String & st);
static int HowMany();
};
#endif
//string.cpp -- StringBad class methods
#include
#include "strng.h"
......

String::String(const char * s)
{
len = std::strlen(s);
str = new char[len + 1];
strcpy_s(str, len + 1, s);
num_strings++;
}
String::String()
{
len = 4;
str = new char[1];
str[0] = '\0';
num_strings++;
}
String::String(const String & st)
{
num_strings++;
len = st.len;
str = new char[len + 1];
strcpy_s(str, len + 1, st.str);
}
String::~String()
{
--num_strings;
delete[] str;
}
......

bool operator < (const String & st, const String st2)
{
return (std::strcmp(st.str, st2.str) < 0); //无法访问私有成员
}

bool operator > (const String & st, const String st2)
{
return st2 < st; //"<"不明确
}

bool operator == (const String & st, const String st2)
{
return (std::strcmp(st.str, st2.str) == 0); //无法访问私有成员
}
......
求助
最佳答案
  • 五星知识达人网友:北城痞子
  • 2021-01-25 21:52
定义与实现参数类型不一致。
实现里const String st2应该是const String& st2
全部回答
  • 1楼网友:荒野風
  • 2021-01-25 22:18
函数头: ostream & operator<< (ostream &cout, complex &c) 应该改成: ostream & operator<< (ostream &cout, const complex &c)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯