[英]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.