エラーメッセージ

mainの戻り値の型にはintを使用してくださいvoidは使用できません。
int main(void) オーバーロード関数はint main(void)と戻り値の型のみが異なります

この2つがどうしても消えません
よろしくお願いいたします

引用元:http://kivantium.hateblo.jp/entry/20120822/p1
    Kinect 実践プログラム 杉浦司

#include"stdafx.h"
#include <time.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include "opencv/Labeling.h"
#include <cstdio>

void main()
{
    try {
        KinectSample kinect;
        kinect.initialize();
        kinect.run();
        using namespace cv;
        using namespace std;
        int num;
        int main(); {
            try {
                VideoCapture capture(0);
                Mat RGBMap, Cloud, valid;
                IplImage ipl_RGB;
                IplImage *imgR, *imgG = 0, *imgB;
                IplImage *imgThreshold_R, *imgThreshold_G, *imgThreshold_B, *imgResult, *imgTmp, *RGB_image;
                int x, y;
                short *dst;
                LabelingBS labeling;
                RegionInfoBS    *ri;
                dst = new short[640 * 480];

                imgThreshold_R = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1);
                imgThreshold_G = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1);
                imgThreshold_B = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1);
                imgResult = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1);
                imgTmp = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1);
                imgR = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1); //Red
                imgG = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1); //Green
                imgB = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1); //Blue
                while (1) {
                    // データの更新を待つ
                    capture.grab();
                    // RGBを取得して表示
                    capture.retrieve(RGBMap, CV_CAP_OPENNI_BGR_IMAGE);
                    ipl_RGB = RGBMap;
                    RGB_image = &ipl_RGB;
                    cvSplit(RGB_image, imgB, imgG, imgR, NULL);
                    // 赤の要素が100以上で、緑と青より1.5倍以上あるピクセルを抽出
                    cvThreshold(imgB, imgThreshold_B, 100, 255, CV_THRESH_BINARY);
                    cvDiv(imgB, imgG, imgTmp, 10); // 10倍
                    cvThreshold(imgTmp, imgThreshold_G, 18, 255, CV_THRESH_BINARY);
                    cvDiv(imgB, imgR, imgTmp, 10);
                    cvThreshold(imgTmp, imgThreshold_R, 18, 255, CV_THRESH_BINARY);
                    cvAnd(imgThreshold_G, imgThreshold_R, imgTmp, NULL);
                    cvAnd(imgTmp, imgThreshold_B, imgResult, NULL);
                    cvAnd(imgThreshold_G, imgThreshold_R, imgTmp, NULL);
                    cvAnd(imgTmp, imgThreshold_B, imgResult, NULL);

                    //ラベリング
                    labeling.Exec((uchar *)imgResult->imageData, dst, imgResult->width, imgResult->height, true, 30);
                    if (labeling.GetNumOfResultRegions() != 0) {
                        ri = labeling.GetResultRegionInfo(0);
                        //四角形の描画
                        int ltop_x, ltop_y, rbottom_x, rbottom_y;
                        ri->GetMin(ltop_x, ltop_y);
                        ri->GetMax(rbottom_x, rbottom_y);
                        cvLine(RGB_image, cvPoint(ltop_x, ltop_y), cvPoint(rbottom_x, ltop_y), CV_RGB(255, 255, 255));
                        cvLine(RGB_image, cvPoint(rbottom_x, ltop_y), cvPoint(rbottom_x, rbottom_y), CV_RGB(255, 255, 255));
                        cvLine(RGB_image, cvPoint(rbottom_x, rbottom_y), cvPoint(ltop_x, rbottom_y), CV_RGB(255, 255, 255));
                        cvLine(RGB_image, cvPoint(ltop_x, rbottom_y), cvPoint(ltop_x, ltop_y), CV_RGB(255, 255, 255));
                        float f_x, f_y;
                        ri->GetCenter(f_x, f_y);
                        x = (int)f_x;
                        y = (int)f_y;
                        capture.retrieve(Cloud, CV_CAP_OPENNI_POINT_CLOUD_MAP);
                        capture.retrieve(valid, CV_CAP_OPENNI_VALID_DEPTH_MASK);
                        if (valid.at<unsigned char>(y, x) == 0xff) {
                            Vec3f s = Cloud.at<Vec3f>(y, x);
                            printf("%f %f %f\n", s[0], s[1], s[2]);  //座標を表示
                        }
                        else {
                            printf("invalid!\n");
                        }
                    }

                    cvShowImage("Window", RGB_image);
                    if (waitKey(10) >= 0) {
                        break;
                    }
                }
                destroyAllWindows();
            }
            catch (...) {
                cout << "exception!!" << endl;
            }
        }
    }

    catch (std::exception& ex) {
        std::cout << ex.what() << std::endl;
    }
}