Ich teste gerade eine Datei und ich habe eine Situation, wo ich auf einige der geschützten Mitglieder der Klasse von main.cpp zugreifen muss. Ich habe versucht, hinzuzufügen, main()
als Freund, arbeitete nicht aus und lernte, dass es nicht funktioniert, so bewegte ich alles in main()
zu einem test()
und machte die test()
als Freund. immer noch zeigt es den Fehler.Muss sich die Friend-Funktion in derselben Datei befinden?
Beispiel würde
//--File.hpp
namespace Files {
class File {
public:
File(long word_):word(word_) {}
protected:
long word;
private:
friend int test();
};
}//ns:Files
//--List_File.hpp
namespace Files {
class List_File :public File {
public:
List_File() : File(sizeof(int) + sizeof(long)) {}
private:
friend int test();
};
}//ns:Files
//--main.cpp
using namespace Files;
int test() {
File *pd = new List_File();
assert(pd->word == 12); //LINE 34
return 0;
}
int main() {
test();
return 0;
}
sein // heißt es Fehler in Zeile 34: Basis :: Wert geschützt. Bitte um Rat.
g++ -O -Wall -Wno-unused -o a.out File.cpp List_File.cpp Data_File.cpp
Free_List_File.cpp main.cpp
File.hpp: In function ‘int test()’:
File.hpp:30:7: error: ‘long int Files::File::word’ is protected
main.cpp:34:16: error: within this context
make: *** [a.out] Error 1
für mich der entsandte Code kompiliert fein aktualisiert (unter G ++ 4.2), nachdem ich die abgeleitete Klasse Erklärung geändert (es sollte sagen: „Klasse Derived: public Base“, aber die ": public Base" fehlt) –
yeah yeah öffentliche basis ist da .. ich werde nochmal nachschauen. – howtechstuffworks
@ JeremyFriesner Es ist seltsam, dass das obige Code-Snippet den gleichen Fehler ausgibt, wenn es mit meinem g ++ 4.4.5 kompiliert wird. Hat es etwas mit Namensraum zu tun? Ich meine, vielleicht sollten Sie 'test' im Namespace' Files' implementieren. Kann keine Tonreferenz finden, also nur einen Kommentar. –