错误:指定的返回类型冲突,与平时不同

Posted

技术标签:

【中文标题】错误:指定的返回类型冲突,与平时不同【英文标题】:error: conflicting return type specified, different than usual 【发布时间】:2011-12-04 23:41:35 【问题描述】:

我是一名计算机科学专业的学生。我知道“指定的冲突返回类型”通常意味着您在声明之前使用了一个函数,但这个有点不同。由于严格的分配准则,我正在实现一个任务调度程序(我们自己的多线程),并在一个名为 Task 的类中,在 Task.h 我们有:

void Task::Start()
    int * returnval = new int;
    *returnval = pthread_create(&thread_id,NULL,tfunc,this);        
    delete returnval;

然后在另一个文件中,schedulable.h,我们有:

int Schedulable::Start() 
    try 
        Task::Start();
        return 0; 
    catch(int e)  return 1;  

编译时出现“返回类型冲突”错误:

In file included from scheduler.H:59, from task_test_step2.cpp:9: schedulable.H:162: error: conflicting return type specified for ‘virtual int Schedulable::Start()’ task.h:157: error: overriding ‘virtual void Task::Start()’

有什么办法可以让这种情况停止发生吗?

【问题讨论】:

实际错误发生在哪一行?你能粘贴真正的错误信息,而不是它的概要吗? TaskSchedulable是什么关系?如果Task 继承自Schedulable,那么你有两个Starts 返回类型冲突,这当然是一个错误。原因是如果你有一个Schedulable 的对象并调用它的Start 编译器会感到困惑。 你能发布实际的错误吗? @Shahbaz:我敢打赌你是对的;您应该将其发布为答案。 (虽然我假设Schedulable 继承自Task,而不是相反。) 哎呀In file included from scheduler.H:59, from task_test_step2.cpp:9: schedulable.H:162: error: conflicting return type specified for ‘virtual int Schedulable::Start()’ task.h:157: error: overriding ‘virtual void Task::Start()’ 【参考方案1】:

问题在于Schedulable::Start 覆盖Task::Start 并将返回类型从void 更改为int。你可能想让Task::Start 也返回一个int:

int Task::Start()
    // no need to use new here!
    int returnval = pthread_create(&thread_id,NULL,tfunc,this);        
    return returnval;

【讨论】:

好吧,我想它会归结为,我们被指示不要更改头文件,除非我们可以证明这样做的充分理由,所以我只是确保没有其他选择。谢谢,非常感谢!

以上是关于错误:指定的返回类型冲突,与平时不同的主要内容,如果未能解决你的问题,请参考以下文章

致命错误 LNK1112:模块机器类型“X86”与 2010 的目标机器类型“x64”冲突

当我使用日期类型变量而不是硬编码日期时,为啥会出现“操作数类型冲突:日期与 int 不兼容”错误?

错误:列“DOB”的类型与UNPIVOT列表中指定的其他列的类型冲突

麻烦构建旧版本的 SIP:致命错误 LNK1112:模块机器类型“x64”与目标机器类型“X86”冲突

错误: ADODB.Command (0x800A0BB9) 参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突

模块计算机类型“X86”与目标计算机类型“X64”冲突,设置成X64后还有错误!答案在此!