Ошибка C ++ LNK2005 и общее наследование различных файлов проекта

У меня есть три файла:

A.h

    #ifndef A_H
    #define A_H

    #include <iostream>
    #include <string>

    using namespace std;

    //FUNCTIONS
    void main();
    int menu();
    void inputData();
    void processData();
    void storeData();
    // void viewData();

    #endif

A.cpp

    #include "B.cpp"

void main() {

    int uChoi;
    uChoi = menu();

    if (uChoi = 0) {
        cout << "Hi" << endl;
        // inputData();
    }
    else {
        cout << "Bye" << endl;
        // viewdata();
    }

}

B.cpp

#include "A.h"

int menu() {    
    int c;
    int userChoice;

    bool validChoice = false;
    do {
        cout << "Please make your choice." << endl;
        cin >> userChoice;
        if (userChoice == 0) {
            c = 0;
            return c;
        }
        else if (userChoice == 1) {
            c = 1;
            return c;
        }
        else {
            validChoice = true;
            cout << "That is not a valid choice." << endl;
        }
    }
    while(validChoice = true);
}

Я прихожу к ошибке, что моя функция menu (); был определен дважды:

1> B.obj: ошибка LNK2005: «int __cdecl menu (void)» (? Menu @@ YAHXZ) уже определено в A.obj 1> S: \ Documents \ Visual Studio 2012 \ Projects \ Database \ Debug \ Database.exe : фатальная ошибка LNK1169: найден один или несколько многократно определенных символов ========== Сборка: 0 успешных, 1 неудачных, 0 актуальных, 0 пропущенных ==========

С кодом ошибки:

Ошибка 2, ошибка LNK2005: «int __cdecl menu (void)» (? Menu @@ YAHXZ) уже определено в A.obj S: \ Documents \ Visual Studio 2012 \ Projects \ Database \ Database \ B.obj Database

Приветствуем любую помощь или ошибки, обнаруженные в моем коде, ура :)

с использованием IDE Microsoft Visual Express 2012


person SchpinkelDinkel    schedule 19.04.2018    source источник
comment
main() возвращает int.   -  person underscore_d    schedule 19.04.2018
comment
Никогда не включайте файл cpp. #include "B.cpp" должно быть #include "A.h"   -  person NathanOliver    schedule 19.04.2018


Ответы (1)


удалите include b.cpp из a.cpp, создайте включаемый файл с именем b.h, в котором вы определяете функцию menu ().

проблема в том, что, как вы написали, a.cpp будет иметь функцию menu (), скомпилированную в его объектном файле, а также b. тогда компоновщик не будет знать, какую функцию menu () вы хотите (даже если они равны).

person Tomaz Canabrava    schedule 19.04.2018