以下这段简单的代码,可以在VC2008中编译通过,但是g++却无法通过编译:
如果g++是正确的,我如何访问类的受保护成员?还有其他方法吗?
@Suroot你的意思是我不应该传递一个
#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();
}