To ma być klasa łańcuchowa z wieloma operatorami i funkcjami, w tym dwiema funkcjami znajomego. A ci dwaj sprawiają mi kłopoty, ponieważ kompilator mówi, że nie mają dostępu do prywatnych członków. Oto moja string.h:Funkcja przyjaciela C++ nie może uzyskać dostępu do prywatnych członków.
#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;
wiele irrevelant funkcji tutaj ...
friend int operator/ (const Str&, char);
friend std::ostream& operator<< (std::ostream&, const Str&);
};
}
#endif /* STR_H */
Oto 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;
}
Ten kod nie będzie kompilować, kompilator twierdzący, że członkowie Str
są prywatni.
Jakie błędy dostaniesz? – 0x499602D2
error: 'char * MyStr :: Str :: data' jest prywatne | error: 'unsigned int MyStr :: Str :: length' jest prywatne | – spinakker
W jakiej linii emituje ten błąd? Czy jest to dla obu funkcji? – 0x499602D2