C++ &引用;找到一个或多个多重定义符号;编译时出错
在构建时,我遇到以下错误: 错误5错误LNK2005:“int\uu cdecl numGen(void)”(?numGen@@YAHXZ) 已在main.obj中定义 错误6错误LNK1169:找到一个或多个乘法定义符号 numGen.cc:C++ &引用;找到一个或多个多重定义符号;编译时出错,c++,C++,在构建时,我遇到以下错误: 错误5错误LNK2005:“int\uu 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));
#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 numGen()
{
内部;
srand(time(NULL));//--为随机数种子。
rNum=1+(rand()%100);
返回rNum;
}
main.cc:
#include <iostream>
#include "NumGen.cc"
int main()
{
std::cout << numGen();
return 0;
}
#包括
#包括“NumGen.cc”
int main()
{
STD::CUT< P>不应将C++文件包含在其他C++文件中。这导致了双重定义的符号。相反,您应该创建一个带有前向声明的头文件,包括在共享函数的文件中,并分别编译文件:
numGen.h:
int numGen();
在两个cc
文件中包括numGen.h
,并删除#包括“numGen.cc”/>代码> 不应在其他C++文件中包含C++文件。这会导致双重定义的符号。相反,您应该创建一个带有前向声明的头文件,包括在共享函数的文件中,并分别编译文件:
numGen.h:
int numGen();
在两个cc
文件中包括numGen.h
,并删除#包括“numGen.cc”
您正在包括cc文件。仅包括实际的头文件您正在包括cc文件。仅包括实际的头文件By。\include
ingNumGen.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;
}
#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
预处理器指令只是将要包含的文件的内容插入要包含的位置(当然,除非它以前被包含在include-guard中。我还假设您正在同一命令行上编译NumGen.cc
和main.cc
,因此,如果函数NumGen
现在在这两个文件中定义和实现,那么自然会出现多定义的符号错误
您需要做的是在头文件中向前声明numGen
,我们称之为numGen.h
:
int numGen();
然后在NumGen.cc
和main.cc
中添加行#include
ingNumGen.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;
}
#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
预处理器指令只是将要包含的文件的内容插入要包含的位置(当然,除非它以前被包含在include-guard中。我还假设您正在同一命令行上编译NumGen.cc
和main.cc
,因此,如果函数NumGen
现在在这两个文件中定义和实现,那么自然会出现多定义的符号错误
您需要做的是在头文件中向前声明numGen
,我们称之为numGen.h
:
int numGen();
然后把行#包括“NumGen.h”
在NumGen.cc
和main.cc
中,为什么要包含一个源文件?@GManNickG这就是函数所在的位置…编译时使用的命令/制作文件是什么?你能发布标题吗?为什么包含源文件?@GManNickG这是函数所在的位置…编译时使用的命令/制作文件是什么你能把标题贴出来吗