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



我有三个文件:

    #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

答.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

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

问题是,按照你写的方式,a.cpp 将在其目标文件上编译一个 menu(( 函数,还有 b. 然后链接器将不知道你想要什么 menu(( 函数(即使它们相等(。

最新更新