실제로 파일을 테스트하고 있는데, 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)에 오류가 말한다 될 것이다. 제발 조언.
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
(G ++ 4.2에서) 나를 위해 잘 컴파일 게시 된 코드 나 파생 클래스 선언을 수정 한 후, (이 말을한다 "파생 클래스 : 공개 자료를" 하지만 ": 공공 기지"가 누락되었습니다) –
예, 공개 기지가 있습니다. 다시 확인하겠습니다. – howtechstuffworks
@JeremyFriesner 위의 코드 조각이 g ++ 4.4.5로 컴파일 할 때 동일한 오류를 발생시키는 것은 이상한 일입니다. 네임 스페이스와 관련이 있습니까? 네임 스페이스'Files'에'test'를 구현해야 할 수도 있습니다. 사운드 참조를 찾을 수 없으므로 주석 만 있습니다. –