前向声明和模板功能错误

bay*_*ayu 3 c++ forward-declaration

目前我对前向声明和模板功能有一个令人沮丧的问题.我一直在尝试谷歌搜索并做一些修改但到目前为止没有任何工作.以下是代码的片段:

class TaskScheduler; --> //forward declaration of ‘struct TaskScheduler’
//
//

class TaskEvent {
//
//
};

class HostTask {
//
//
};

template<class T> inline HostTask*
findT(TaskScheduler* tss, T* e)
{
    map<int, HostTask*>::iterator it;
    bool bEq = false;
    for(it = tss->tasks_.begin(); it != tss->tasks_.end(); it++) { --> //error: invalid use of incomplete type ‘struct TaskScheduler’
    if(dynamic_cast<TaskEvent*>(e))
        bEq = dynamic_cast<TaskEvent*>(e)->equal(it->second->ev_);
    else if(dynamic_cast<HostTask*>(e))
        bEq = dynamic_cast<HostTask*>(e)->equal(it->second);
    if(bEq) {
        return it->second;
    }
}
return NULL;
}
//

//class TaskScheduler definition
class TaskScheduler : virtual public HCIEventsHandler {
friend HostTask* findT<TaskEvent>(TaskScheduler* tss, TaskEvent* e); //findT function is used here
//
//
};
Run Code Online (Sandbox Code Playgroud)

以下是我在代码中显示的错误消息:./ bt-taskscheduler.h:159:错误:'struct TaskScheduler'的转发声明./bt-taskscheduler.h:229:错误:无效使用不完整类型'struct TaskScheduler'

有人能告诉我这段代码出了什么问题吗?任何帮助表示赞赏..

CB *_*ley 5

findT您的定义中,您正在使用tss->tasks_哪个解引用指向类型对象的指针,TaskScheduler因此您需要结构的完整定义,而不仅仅是程序中此处可见的前向声明.

定义struct TaskScheduler需求的定义之前出现findT函数模板.