构建时遇到这些错误:
错误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;
}
main.cc:
#include <iostream>
#include "NumGen.cc"
int main()
{
std::cout << numGen();
return 0;
}
答案 0 :(得分:5)
您不应将C ++文件包含在其他C ++文件中。这导致了双重定义的符号。相反,您应该创建一个带有前向声明的头文件,将其包含在共享该函数的两个文件中,并分别编译文件:
numGen.h:
int numGen();
在numGen.h
个文件中加入cc
,然后移除#include "NumGen.cc"
。
答案 1 :(得分:3)
通过#include
文件中的NumGen.cc
main.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
中。
答案 2 :(得分:1)
您要包含cc文件。仅包含实际标题