20

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

对“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);
}

和 bh

#ifndef B_H
#define B_H
#include "a.h"

class B
{
    public:
        B();
        void funcB();
};

#endif // B_H

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

4

2 回答 2

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

于 2013-07-18T15:27:35.003 回答
7

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

#include "a.h"

void A::funcA(int i) {
     ^^^
//Add the class name before the function name
    std::cout << i << std::endl;
}

你做事的方式,你定义了一个 unrelated funcA(),最终有两个函数(即A::funcA()and funcA(),前者是未定义的)。

于 2013-07-18T15:29:48.747 回答