2013-06-18 164 views
2

我有2类,如下每个人都有头文件类中的一个具有功能如下:未定义的函数调用引用?

int call_thread() 
    { 
    pthread_create(&thread, NULL, &Print_data, NULL); 
    return 0; 
    } 

我试图调用此方法在2类:

void position::tick(schedflags_t flags) 
{ 
    call_thread(); 
    } 

我总是得到一个错误undefined reference to 'call_thread()'。我也试图声明它是静态的,但它给了我一个错误:that is "" Static function declared but not defined""。 我错过了什么? 注意:我包含了课程1的头文件。

+3

您是如何编制?在我看来,编译器无法找到带定义的.cpp文件。 – olevegard

+0

如果'call_thread()'是一个单纯的函数,它必须至少在'.h'-file或者'.cpp'文件中声明至少一次 –

+0

call_thread在第一类的h文件中声明,第二类只包含第一个的h文件 – Zeyad

回答

2

我的猜测是,你已经宣布在Class1的定义call_thread():

class Class1 
{ 
    public: 
    int call_thread(){...} 
} 

然后你试图调用类的位置这个方法:

void position::tick(schedflags_t flags) 
{ 
    call_thread(); 
} 

call_thread()是一个Class1成员函数,并且您需要Class1的一个实例来调用它,如果它是静态成员,则需要类名称:

void position::tick(schedflags_t flags) 
{ 
    //for static member 
    Class1::call_thread(); 

    //for instance member 
    Class1 object; 
    object.call_thread(); 
} 
1

如果你有类,你应该有对象,所以你可以调用公共方法(函数)。

试试象下面这样:在Class1.h

class Class1{ 
public: 
    Class1(); //constructor 
    ~Class1(); //destructor 

    int call_thread(); 
} 

然后在Class2中,你应该有一个对象,是这样的:

void position::tick(schedflags_t flags) 
{ 
    Class1 obj; 
    obj.call_thread(); 
}