当我在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进行编译。
答案 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()
,前者未定义)。