Visual C++ говорит, что функция void должна возвращать значение

StackOverflow https://stackoverflow.com/questions/1705614

  •  19-09-2019
  •  | 
  •  

Вопрос

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 " D "_unicode" /d "Unicode" /gm /ehsc /rtc1 /mdd /fo "debug " /fd"debugvc90.pdb " /w3 /c /zi /tp". Magicsquare.cpp "] Создание команды Строка "cl.exe @" c: users jonathan Documents Visual Studio 2008 Projects Magicsquare Debug RSP00000822923000.rsp " /nologo /errorReport: rample"

Компиляция окна вывода...Magicsquare.cpp C: users jonathan Documents Visual Studio 2008 Projects Magicsquare Magicsquare.cpp (224):ошибка C4716:'проверять' :должен вернуть значение

Журнал результатов

мой заголовок функции и функция

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 check(int** matrix, int size);

Ваш исходный код будет скомпилирован с предупреждением на C, но не на C++.Попробуйте это в Visual Studio 2008.Переименуйте расширение файла в .c вместо .cpp, чтобы принудительно компилировать C вместо компиляции C++.Он скомпилируется с предупреждением.Но будьте осторожны: если вы когда-нибудь воспользуетесь возвращаемым значением проверки, это будет мусор.

По этой ссылке есть более подробная информация: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 с атрибуция
Не связан с StackOverflow
scroll top