C ++错误LNK2005和不同项目文件的常规继承

时间:2018-04-19 14:56:30

标签: 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);
}

我到达了我的功能菜单();已经定义了两次:

  

1&gt; B.obj:错误LNK2005:“int __cdecl menu(void)”(?menu @@ YAHXZ)已在A.obj中定义   1&gt; 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

1 个答案:

答案 0 :(得分:0)

从a.cpp中删除include b.cpp,创建一个名为b.h的包含文件,在其中定义menu()函数。

问题在于,在您编写的方式中,a.cp​​p将在其上编译一个menu()函数的目标文件,并且b。然后链接器将不知道你想要什么menu()函数(甚至强制它们是相同的)。