对静态函数的未定义引用

undefined reference to a static function

本文关键字:引用 未定义 静态函数      更新时间:2023-10-16

当我在类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

我正在使用代码::块进行编译。

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

您忘记在定义前面加上类名:

#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(),前者未定义)。