下面一段简单的代码,用 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你的意思是我不应该传递一个类型的对象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();
}