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;
}

あなたのやり方では、無関係な を定義しfuncA()、最終的に 2 つの関数 (つまりA::funcA()funcA()前者は未定義) になりました。

于 2013-07-18T15:29:48.747 に答える