C++ C++;控件到达非void的末尾

C++ C++;控件到达非void的末尾,c++,coding-style,C++,Coding Style,我试图编译这个,但它给了我那个恼人的错误 Image imageLabeling(const Image &img, ImageLabels &imgL) { long numLines=img.size(); long numCols=img[0].size(); int u=0; int v=0; int label=1; imgL.resize(numLines); for (unsigned int i=0;

我试图编译这个,但它给了我那个恼人的错误

Image imageLabeling(const Image &img, ImageLabels &imgL)
{

    long numLines=img.size();
    long numCols=img[0].size();

    int u=0;
    int v=0;
    int label=1;

    imgL.resize(numLines);
    for (unsigned int i=0; i<numLines; i++)
        imgL[i].resize(numCols);

    for (unsigned int i=0; i <numLines; i++)
        for (unsigned int j=0; j <numCols; j++)
            imgL[i][j]=0;


    for (int i=0; i<numLines; i++)
        for (int j=0; j<numCols; j++)
        {
            if(img[i][j]=='1'&&imgL[i][j]==0)
            {
                floodFill (u,v,label,img,imgL);
                label++;
            }
        }}
图像图像标签(常量图像和img、图像标签和imgL)
{
长numLines=img.size();
long numCols=img[0].size();
int u=0;
int v=0;
int-label=1;
imgL.resize(numLines);

对于(unsigned int i=0;i函数不返回图像。请将返回类型声明为void。

在此行中:

Image imageLabeling(const Image &img, ImageLabels &imgL)
^^^^^
您告诉编译器您的函数“imageLabeling”应该返回“Image”类型的内容。然后,您继续实际不返回此函数中的任何内容

您应该将该行更改为:

void imageLabeling(const Image &img, ImageLabels &imgL)
^^^^

要么这样,要么实际返回您承诺的“图像”。

这个“恼人的错误”意味着您在
imageLabeling
函数中缺少
return
语句。如果它应该返回某个内容,请添加
return
;否则,请使函数
无效
(无论如何,你的代码没有使用那个函数的返回值)。只是另一个注释,C++禁止使用带有模板的本地定义类,因为它们没有链接,所以为了更好的移植性,你应该在STL使用它时声明结构点在外。@ JykyL+C++ 11改变了。@ PITE是的,我知道,实际上我写了…“为了更好的便携性”…但你是对的。谢谢
void imageLabeling(const Image &img, ImageLabels &imgL)
^^^^