-2

我有三个文件:

    #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 数据库中定义

请感谢我的代码中发现的任何帮助或错误,干杯:)

使用 IDE Microsoft Visual Express 2012

4

1 回答 1

1

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

问题在于,按照您编写的方式,a.cp​​p 将在其目标文件上编译 menu() 函数,并且 b。那么链接器将不知道您想要什么 menu() 功能(即使它们是相等的)。

于 2018-04-19T15:00:03.787 回答