Многократное определение функции

120
03 сентября 2021, 05:00

Основной блок:

    #include <string>
    #include "golf.cpp"
    //extern void setgolf(golf& g, const char* name, int hc);
    //extern int setgolf(golf& g);
    //extern void handicap(golf& g, int hc);
    //extern void showgolf(const golf& g);
    int main()
    {
        golf andy;
        golf &lol=andy;
        using namespace std;
        cout << "Vvedite name: ";
        char *name =new char[Len];
        int ch;
        cin >> name;
        cout << "Vvedite handicap: ";
        cin >> ch;
        setgolf(lol,name,ch);
        return 0;
    }

Второй блок

    #include <iostream>
const int Len = 40;
struct golf {
    char fullname[Len];
    int handicap;
};

void setgolf(golf &g, const char* name,int hc) {
    std::cout << "*g.fullname=" << *g.fullname << std::endl << "g.handicap=" << g.handicap;
    *g.fullname = *name;
    g.handicap = hc;
    std::cout << "*g.fullname=" << *g.fullname << std::endl << "g.handicap=" << g.handicap;
}
int setgolf(golf& g) {
    std::cout << "Vvedite handicap: ";
    std::cin >> g.handicap;
    std::cout << "Vvedite ima: ";
    std::cin.get(g.fullname, Len);
    if (std::cin) return 1;
    else return(0);
}
void handicap(golf& g, int hc) {
    g.handicap = hc;
    std::cout << "Gandicap otnine =" << hc << std::endl;
}
void showgolf(const golf& g) {
    std::cout << "Name: " << g.fullname << "  handicap: " << g.handicap << std::endl;
}

https://docs.microsoft.com/ru-ru/cpp/error-messages/tool-errors/linker-tools-error-lnk2005?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev16.query%3FappId%3DDev16IDEF1%26l%3DRU-RU%26k%3Dk(LNK2005)%26rd%3Dtrue&view=vs-2019

Answer 1

Ну так у вас в проекте файл golf.cpp компилируется как самостоятельный файл проекта, но при этом еще и включен в ConsoleApplication4.cpp через #include. Разумеется, получились двойственные определения.

Зачем вы включили #include "golf.cpp" в ConsoleApplication4.cpp? Чего вы пытались этим добиться?

Answer 2

Решил эту проблему ,добавив static, пере функциями,тем самым предотвратил дублирование.

READ ALSO
Вопрос по компараторам

Вопрос по компараторам

Почему при равных значениях, поступивших на вход компаратору, мы должны возвращать false, иначе это вызывает Run Time ErrorОб этом узнал тут: https://codeforces

101
Как вычислить, принадлежат ли точки коориднат заданному графику?

Как вычислить, принадлежат ли точки коориднат заданному графику?

Всем привет! Дали такое задание:вычислить, принадлежат ли веденные координаты с клавиатуры данному графикуВот мой график:

154
В чём смысл std::forward при передаче параметров?

В чём смысл std::forward при передаче параметров?

В чём разница между следующими двумя способами передачи параметров?

164