2013-07-18 53 views
7

Tôi có một vấn đề lạ khi tạo một hàm tĩnh trong lớp A và tôi muốn gọi nó từ hàm lớp B. Tôi nhận đượcundefined tham chiếu đến một hàm tĩnh

tài liệu tham khảo không xác định cho `A :: funcA (int)'

Đây là mã nguồn của tôi: 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); 
} 

và b.h

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

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

#endif // B_H 

Tôi đang biên soạn với Code :: Blocks.

Trả lời

14
#include "a.h" 

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

nên

#include "a.h" 

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

Kể từ funcA là một hàm tĩnh của lớp học của bạn A. Quy tắc này áp dụng cho cả phương pháp tĩnh và không tĩnh.

+0

Cảm ơn, đó chính xác là vấn đề .. Tôi nghĩ rằng khi funcA() là tĩnh, viết A :: funcA() sẽ không có ý nghĩa gì ... Có vẻ như tôi sai. – xenom

6

Bạn quên tiền tố sắc nét với tên lớp:

#include "a.h" 

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

Cách bạn đã điều gì đó, bạn định nghĩa một không liên quan funcA(), kết thúc với hai chức năng (cụ thể là A::funcA()funcA(), cựu là không xác định) .

+0

Cảm ơn, đó là vấn đề. Như Nbr44 trả lời đầu tiên tôi sẽ xác nhận câu trả lời của anh ấy nhưng upvote của bạn. – xenom

Các vấn đề liên quan