次の単純なコードは VC2008 でコンパイルされますが、g++ はコードを拒否します。
#include <iostream>
class myclass
{
protected:
void print() { std::cout << "myclass::print();"; }
};
struct access : private myclass
{
static void access_print(myclass& object)
{
// g++ and Comeau reject this line but not VC++
void (myclass::*function) () = &myclass::print;
(object.*function)();
}
};
int main()
{
myclass object;
access::access_print(object);
}
(/W4)VC でオンになっていますが、警告は表示されません。
g++ 4.4.1 でエラーが表示されます:
correct.cpp: In static member function ‘static void access::access_print(myclass&)’:
correct.cpp:6: error: ‘void myclass::print()’ is protected
g++ が正しい場合、クラスの保護されたメンバーにアクセスするにはどうすればよいですか? 別の方法はありますか?
@Suroot type のオブジェクトを渡してはいけないということmyclassですか?実際には問題ではありません.g ++は同じエラーを出しますが、VCは警告なしでコードをコンパイルします.
#include <iostream>
class myclass
{
protected:
void print() { std::cout << "myclass::print();"; }
};
struct access : private myclass
{
static void access_print()
{
myclass object;
void (myclass::*function) () = &myclass::print;
(object.*function)();
}
};
int main()
{
access::access_print();
}