【发布时间】:2010-12-19 17:56:27
【问题描述】:
下面一段简单的代码,用 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();
}
【问题讨论】:
-
@AraK,请查看 cmets 的问题:stackoverflow.com/questions/1723977/… :)
-
@litb 我直到现在才看到你的评论 >_
标签: c++ standards standards-compliance