2013-07-18 12 views
7

Mam dziwny problem, gdy utworzę funkcję statyczną w klasie A i chcę ją wywołać z klasy B. I dostaćniezdefiniowane odniesienie do funkcji statycznej

niezdefiniowana odniesienia do `A :: funcA (int)”

Oto mój kod źródłowy: a.cpp

#include "a.h" 

void funcA(int i) { 
    std::cout << i << std::endl; 
} 

ah

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

i B.H.

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

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

#endif // B_H 

Mam kompilacji z Code :: Blocks.

Odpowiedz

14
#include "a.h" 

void funcA(int i) { 
    std::cout << i << std::endl; 
} 

powinny być

#include "a.h" 

void A::funcA(int i) { 
    std::cout << i << std::endl; 
} 

Od funcA jest statyczną funkcją klasy A. Ta reguła dotyczy zarówno metod statycznych, jak i niestatycznych.

+0

Dzięki, to jest dokładnie problem .. Pomyślałem, że jako funcA() było statyczne, pisanie A :: funcA() nie miałoby sensu ... Wygląda na to, że się mylę. – xenom

6

Zapomniałeś prefiks definicję z nazwą klasy:

#include "a.h" 

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

Sposób zrobiłeś rzeczy, zdefiniowaną niepowiązanych funcA(), kończący się z dwóch funkcji (mianowicie A::funcA() i funcA(), byłego jest niezdefiniowany) .

+0

Dzięki, to był problem. Gdy Nbr44 odpowiedział na pierwszą, poprawię jego odpowiedź, ale przegłosuję twoją. – xenom

Powiązane problemy