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).