Undefined ссылка на статическую функцию

У меня странная проблема, когда я создаю статическую функцию в классе A, и я хочу назвать ее из функции класса B. Я получаю

undefined ссылка на `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

Я компилирую с помощью Code:: Blocks.

Ответ 1

#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. Это правило применяется как к статическим, так и к нестационарным методам.

Ответ 2

Вы забыли префикс определения с именем класса:

#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(), первая из которых была undefined).