私は実際にファイルをテストしていますが、main.cppからクラスの保護されたメンバーの一部にアクセスする必要がある状況があります。友達として追加しようとしましたがmain()
、うまくいかず、うまくいかないことがわかったので、すべてをに移動しmain()
て友達test ()
にしtest()
ました。それでもエラーが表示されます。
例は
//--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;
}
// 34行目にエラーが表示されます:Base::valueは保護されています。ご意見をお聞かせください。
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