未定义的静态函数引用

时间:2013-07-18 15:26:22

标签: c++

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

  

未定义对`A :: funcA(int)'

的引用

这是我的源代码: a.cpp

#include "a.h"

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

A.H

#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

我正在使用Code :: Blocks进行编译。

2 个答案:

答案 0 :(得分:22)

#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的静态函数。此规则适用于静态和非静态方法。

答案 1 :(得分: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(),前者未定义)。