Сепия Фильтр неопределенная ссылка на главную? - PullRequest
0 голосов
/ 27 апреля 2020

Я работаю над проектом, но по какой-то причине мой код не скомпилируется и выводит сообщение об ошибке.

''' /usr/bin/../lib/gcc/x86_64-linux-gnu/7.4.0/../../../x86_64-linux-gnu/crt1.o: In function 
`_start': (.text+0x20): undefined reference to `main' clang-7: error: linker command failed 
with exit code 1 (use -v to see invocation) <builtin>: recipe for target 'helpers' failed 
make: *** [helpers] Error 1 '''

С акцентом на

undefined reference to 'main'. 

Я не вижу никаких проблем, вот мой код, и я был бы признателен за любую помощь.

МОЙ КОД

void sepia(int height, int width, RGBTRIPLE image[height][width])
{
    // over height
    for (int h = 0; h < height; h++)
    {
        // over width
        for ( int w = 0; w < width; w++)
        {
            int sepiaRed = .393 *  image[h][w].rgbtRed + .769 *  image[h][w].rgbtGreen + .189 *  image[h][w].rgbtBlue;
            int sepiaGreen = .349 *  image[h][w].rgbtRed + .686 *  image[h][w].rgbtGreen + .168 *  image[h][w].rgbtBlue;
            int sepiaBlue = .272 *  image[h][w].rgbtRed + .534 *  image[h][w].rgbtGreen + .131 *  image[h][w].rgbtBlue;
            // space
            if (sepiaRed > 255 || sepiaGreen > 255 || sepiaBlue > 255)
            {
                sepiaRed = 255;
                sepiaGreen = 255;
                sepiaBlue = 255;
            }

            image[h][w].rgbtRed = (sepiaRed);
            image[h][w].rgbtBlue = (sepiaBlue);
            image[h][w].rgbtGreen = (sepiaGreen);
        }
    }
    return;
}

1 Ответ

0 голосов
/ 27 апреля 2020

Вы определили основную проблему: undefined reference to _main_ Каждая C программа, встроенная в приложение (автономный исполняемый файл), нуждается в решении по определению. Этот простой позволит вам успешно построить свой исполняемый файл здесь:

Учитывая, что структура определена как:

typedef struct {
    double rgbtRed;
    double rgbtGreen;
    double rgbtBlue;
}RGBTRIPLE;  

RGBTRIPLE image[3][4];//due to the design of sepia, this must be globally defined.

Тогда самая простая основная функция, которая будет компилировать без ошибок:

int main(void)
{
    sepia(3, 4, image);

    return 0;
}

Как уже упоминалось в комментариях, в функцию sepia необходимо внести некоторые изменения. Например, этот оператор:

int sepiaRed = .393 ... 

использует тип int для хранения значений double. Это скомпилирует, но приведет к ошибкам во время выполнения. Изменение int на удвоение для всех этих утверждений является началом. Но есть и другие проблемы.

Оставьте комментарий, если вам нужна дополнительная помощь, или воспользуйтесь отладчиком, чтобы просмотреть код и просмотреть ошибки и внести необходимые корректировки.

Для Например, для неинициализированной структуры image, что будет результатом этого оператора:

double sepiaRed = .393 *  image[h][w].rgbtRed + .769 *  image[h][w].rgbtGreen + .189 *  image[h][w].rgbtBlue;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...