2016-02-11 26 views
3

我得到了段错误并且可以将代码放到这里;我初始化静态函数指针是具有相同名称的全局函数成员:将静态成员函数指针初始化为具有相同名称的函数

#include <iostream> 

class def{ 
     public: 
static void (*pt)(); 
}; 

void pt() 
{ 
     std::cout << "works" << std::endl; 
} 

void (*def::pt)()=pt; 
main(int argc,char* args[]) 
{ 
    std::cout << "pointer is " << def::pt << std::endl; 
    def::pt(); 
} 

这给

pointer is 0 
Segmentation fault (core dumped) 

所以initalization似乎失败。如果我现在将初始化函数的名称更改为其他内容,请说:

[...]   
void pt2() 
{ 
     std::cout << "works" << std::endl; 
} 

void (*def::pt)()=pt2; 
[...] 

这就解决了这个问题。我想知道那里出了什么问题。这是一个范围界定问题吗?在没有宣布def阴影名来声明

+1

'无效(* DEF :: PT)()= :: PT;'应该工作了。 – Jarod42

回答

3
void (*def::pt)()=pt;  

因为你定义的def静态成员,名称。

您可以通过在全局命名空间中明确指定pt选择pt正确的版本:

void (*def::pt)() = ::pt; 
//     ^^ 
+0

感谢您的快速回答!你的意思是全局函数在该行或整个文件中被遮蔽了吗?编辑;我明白,这只是那条线。好的,再次感谢你! – rugermini

相关问题