繁体   English   中英

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

[英]Visual C++ saying void function needs to return a value

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

我在Mac上进行了编译,并且运行良好,但是现在我试图使用Visual c ++进行编译(使用Windows 7)

这是构建日志:

命令行创建内容为[/ Od / D“ WIN32” / D“ _DEBUG” / D“ _CONSOLE” /的临时文件“ c:\\ Users \\ Jonathan \\ Documents \\ Visual Studio 2008 \\ Projects \\ magicsquare \\ Debug \\ RSP00000822923000.rsp” 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个警告

我的函数头和函数

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

您的函数返回的是(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

那不是void函数,而是void **函数。 这意味着您需要返回一个指向void指针的指针。

该功能不是无效的,而是无效**。 意味着它必须返回一个指向空指针的指针。

就像其他人指出的那样,您的返回类型不正确。 您不会在函数中返回任何内容,因此只需删除**就可以了。

出于好奇,在Mac上进行编译时是否收到任何警告? g ++(在我的Linux机器上)仅通过-Wall发出警告。

拿出**上的回报。 即签名应该是:

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

查看您的pastie.org代码示例,我猜测是您复制并粘贴了其他函数,但是忘记删除**。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM