当前位置:  开发笔记 > 编程语言 > 正文

Visual C++说void函数需要返回一个值

如何解决《VisualC++说void函数需要返回一个值》经验,为你挑选了1个好方法。

Visual C++说我的void函数需要一个返回值

我在我的mac上编译了这个,它工作得很好,但现在我试图用Visual c ++编译它(使用Windows 7)

继承人构建日志:

命令行创建临时文件"c:\ Users\Jonathan\Documents\Visual Studio 2008\Projects\magicsquare\Debug\RSP00000822923000.rsp",内容为[/ Od/D"WIN32"/ D"_DEBUG"/ D"_CONSOLE"/ D"_UNICODE"/ D"UNICODE"/ Gm/EHsc/RTC1/MDd/Fo"Debug \"/ Fd"Debug\vc90.pdb"/ W3/c/ZI/TP".\ magicsquare.cpp"]创建命令行"cl.exe @"c:\ Users\Jonathan\Documents\Visual Studio 2008\Projects\magicsquare\Debug\RSP00000822923000.rsp"/ nologo/errorReport:prompt"

输出窗口编译... magicsquare.cpp c:\ users\jonathan\documents\visual studio 2008\projects\magicsquare\magicsquare.cpp(224):错误C4716:'check':必须返回一个值

结果构建日志保存在"file:// c:\ Users\Jonathan\Documents\Visual Studio 2008\Projects\magicsquare\Debug\BuildLog.htm"magicsquare - 1个错误,0个警告(s)

我的函数头和函数

void **check (int **, int);

void **check(int **matrix, int size)
{   
    //check if first row and last row are the same
    int rsum = 0, rsum2 = 0;
    bool rowflag = false;
    for(int i = 0; i < size; i++)
    {
        rsum += *(*(matrix + 0) +i);
        rsum2 += *(*(matrix + size - 1) +i);
    }

    //check if first column and last column are the same    
    int csum = 0, csum2= 0;
    bool columnflag = false;
    for(int i = 0; i < size; i++)
    {
            csum += *(*(matrix + i) + 0);
            csum2 += *(*(matrix + i) + size - 1);
    }   

    //check if diagonals are the same
    int diagonal = 0, diagonal2 = 0;
    bool diagonalflag = false;
    for(int i = 0; i < size; i++)
        diagonal += *(*(matrix + i) + i);

    int m = 0;
    int n = size - 1;   
    while (m <= size - 1)
    {
        diagonal2 += *(*(matrix + m) + n);
        m++;
        n--;
    }

    //if row, column, diagonal are the same
    if (rsum == rsum2 && rsum2 == csum && csum == csum2 && csum2 == diagonal && diagonal == diagonal2)
        cout << "This is a Magic Square\n" << endl;
    else 
        cout << "This is not a Magic Square\n" << endl;
}

如果需要,请参阅整个代码 http://pastie.org/691402



1> m-sharp..:

你的函数返回一个(void**),它是一个指向void指针的指针.要创建void函数,只需将其声明为:

void check(int** matrix, int size);

您的原始代码将使用C语言编译,但不会在C++中编译.在Visual Studio 2008中尝试此操作.将文件扩展名重命名为.c而不是.cpp,以强制进行C编译而不是C++编译.它将编译并发出警告.但要注意,如果你曾经使用过check的返回值,那将是垃圾.

此链接有更多详细信息:http: //pdhut.50megs.com/vczone/articles/diffc/diffc.htm


@Raptrex,它没有.在Mac上无法正常工作.
@Raptrex:C和C++编译器都不需要检测丢失的`return`语句.缺少返回不是C/C++中的错误.(顺便说一句,上面的答案是不正确的,声称它不会在C++中编译).这意味着这是一个实施质量问题.有些编译器会花费更多的时间来检测丢失的返回,有些则没有.你Mac编译器显然是懒惰的,所以它没有检测到它.此外,您的Mac编译器可能有一个强制它检测此类问题的开关,您只是忘了打开它.
推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有