C Многократное определение / сначала определенная здесь ошибка

Я пытаюсь написать программу для книжного магазина и получаю сообщение об ошибке "множественное определение" в файле исходного кода при реализации моей функции.

Вот мой файл Book.c:

#include "Book.h"

void scanBook(book_t* bk) //error here
{
    //implementation here
}

Вот мой файл Book.h:

#pragma once
#include <stdio.h>

typedef char* str;    
typedef enum Genre {Education, Business, Novel} genre_t;

typedef struct Book{
    str ISBN;
    str title;
    str author;
    float price;
    int quantity;
    genre_t genre;
} book_t;

void scanBook(book_t* bk);

А вот мой файл main.c:

#include "Book.h"
#include "Book.c"

int main()
{
    return 0;
}

Ошибка возникает в функции scanBook в Book.c, но я не знаю почему, так как я включил заголовочный файл, а также #pragma один раз, и в заголовочном файле я объявил функцию. В нем говорится, что несколько определений 'scanBook' и obj\Debug\Book.o .... впервые определены здесь.

Любая помощь или разъяснение будет принята с благодарностью!

1 ответ

Решение

Не делай

#include “Book.c"

в вашем файле main.c.

Решение - удалить эту строку:

#include "Book.c"

В C и C++ обычно просто включаются файлы заголовков (.h и.hpp), потому что вы передаете файлы.c и.cpp непосредственно компилятору, поэтому включение их также будет неоднозначным.

Другие вопросы по тегам