2013-07-18 62 views
7

我有一个奇怪的问题,当我在类A中创建一个静态函数,我想从类B函数调用它。我得到未定义的引用静态函数

未定义的参考`A :: FuncA的(INT)”

这里是我的源代码: a.cpp

#include "a.h" 

void funcA(int i) { 
    std::cout << i << std::endl; 
} 

#ifndef A_H 
#define A_H 

#include <iostream> 

class A 
{ 
    public: 
     A(); 
     static void funcA(int i); 
}; 

#endif // A_H 

b.cpp

#include "b.h" 

void B::funcB(){ 
    A::funcA(5); 
} 

和b.h

#ifndef B_H 
#define B_H 
#include "a.h" 

class B 
{ 
    public: 
     B(); 
     void funcB(); 
}; 

#endif // B_H 

我与代码:: Blocks的编制。

回答

14
#include "a.h" 

void funcA(int i) { 
    std::cout << i << std::endl; 
} 

应该

#include "a.h" 

void A::funcA(int i) { 
    std::cout << i << std::endl; 
} 

由于funcA是你A类的静态函数。此规则适用于静态和非静态方法。

+0

谢谢,这正是问题所在。 我以为funcA()是静态的,写A :: funcA()就没有任何意义......看来我错了。 – xenom

6

你忘了前缀类名的定义:

#include "a.h" 

void A::funcA(int i) { 
    ^^^ 
//Add the class name before the function name 
    std::cout << i << std::endl; 
} 

你没有的东西,你定义无关funcA(),两个函数结束了的方式(即A::funcA()funcA(),前者是不确定的) 。

+0

谢谢,这是问题所在。当Nbr44回答第一个问题时,我要验证他的答案,但是要高举你的答案。 – xenom