//关于 return 一个 void 的问题?

songk 2002-04-29 07:49:22
//下边的代码通过 Solaris 6的 gcc version 2.95.3 20010315 (release) 编译没有报错。
//但是 Win2K 的 VC++6 就报错,为什么 B::vf()返回一个void还会报错?
//但是我发现上边的 gcc 对全局函数的处理是和 VC6 类似报错的,但对类中的就不报错,可以正常运行。
//为什么?

//#include "stdafx.h"//此行仅于VC++6中

#include <iostream>

using namespace std;

class B{
public:
virtual void f() =0;
};

class D:public B{
public:
void f(){ return vf(); }
void vf() { cout<<"D::vf()"<<endl;}
};

main()
{
B* p=new D;
p->f();
}

//VC6中的报错信息
//--------------------Configuration: t01 - Win32 Debug--------------------
//Compiling...
//t01.cpp
//D:\_MyVC\__TEST\_MyTests\t01\t01.cpp(17) : error C2562: 'f' : 'void' function returning a value
// D:\_MyVC\__TEST\_MyTests\t01\t01.cpp(17) : see declaration of 'f'
//Error executing cl.exe.
//
//t01.exe - 1 error(s), 0 warning(s)
...全文
241 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjk 2002-04-29
  • 打赏
  • 举报
回复
加一个return;不就得了
songk 2002-04-29
  • 打赏
  • 举报
回复
//首先说声sorry,因为上边我把“g++”错写成“gcc”了,
//其次,g++ 对下边的代码是有报错的
//我想问,为什么相同都调用 return void,g++对类的方法就不报错,而对全局函数就报错?
//而VC6是一致的。如果是VC6的bug的话,那说明类方法有什么特殊吗?

#include <iostream>

using namespace std;

void f1(){ return f2(); }

void f2(){ }

main()
{
f1();
}


//g++ 的报错
a.cpp: In function `void f1()':
a.cpp:5: implicit declaration of function `int f2(...)'
a.cpp:5: `return' with a value, in function returning void
招RD和QA 2002-04-29
  • 打赏
  • 举报
回复
是VC的一个bug,使用函数对象时常常会碰到这样的问题,即不能自动识别void return.
hongtu 2002-04-29
  • 打赏
  • 举报
回复
up
freelybird 2002-04-29
  • 打赏
  • 举报
回复
我基本同意楼上的看法,
1. 当函数的返回值为void时,你不应该返回任何值,你可以return,也可以函数结束时什么都不写.
2. 上面代码return vf()按说函数vf()也是没有返回值的,可据我了解,任何函数,实际上都有一个返回值的.而void只是告诉编译器强制不能返回任何值.说白了void也是一种类型.
kinghawk 2002-04-29
  • 打赏
  • 举报
回复
在VC中void型的函数只能返回空,也就是说return;
如果return后有数据,编译器会认为返回的指不为空,它好像不会去判断具体的数据是否为空!
可能是这样的!
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧