1

在构建时,我遇到了这些错误:

错误 5 错误 LNK2005:“int __cdecl numGen(void)”(?numGen@@YAHXZ) 已在 main.obj 中定义 错误 6 错误 LNK1169:找到一个或多个多重定义的符号

numGen.cc:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int numGen()
{
    int rNum;
    srand(time(NULL)); //--Seeds a random number.
    rNum = 1 + (rand() % 100);

    return rNum;
}

主.cc:

#include <iostream>
#include "NumGen.cc"

int main()
{
    std::cout << numGen();
    return 0;
}
4

3 回答 3

5

您不应在其他 C++ 文件中包含 C++ 文件。这导致双重定义的符号。相反,您应该创建一个带有前向声明的头文件,将其包含在共享该函数的两个文件中,然后分别编译这些文件:

numGen.h:

int numGen();

包含numGen.h在两个cc文件中,并删除#include "NumGen.cc".

于 2012-12-04T02:43:28.007 回答
3

通过在您的文件中#includeing ,您将导致预处理器创建两个文件,如下所示:NumGen.ccmain.cc

NumGen.cc

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int numGen()
{
    int rNum;
    srand(time(NULL)); //--Seeds a random number.
    rNum = 1 + (rand() % 100);

    return rNum;
}

main.cc

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int numGen()
{
    int rNum;
    srand(time(NULL)); //--Seeds a random number.
    rNum = 1 + (rand() % 100);

    return rNum;
}

int main()
{
    std::cout << numGen();
    return 0;
}

因为#include预处理器指令只是将您包含的文件的内容插入到您包含它的位置(当然,除非它之前已包含并包含在包含保护中。我还假设您正在同时编译NumGen.cc同一main.cc命令行,所以很自然你会得到一个多重定义的符号错误,因为函数numGen现在在两个文件中都定义和实现了。

您要做的是numGen在头文件中前向声明,我们称之为NumGen.h

int numGen();

然后将线#include "NumGen.h"放入NumGen.cc和中main.cc

于 2012-12-04T02:50:41.537 回答
1

您包括 cc 文件。仅包含实际标题

于 2012-12-04T02:44:08.077 回答