C++ 链接器可以';在命名空间中找不到函数定义
我在函数“main”中得到这个C++ 链接器可以';在命名空间中找不到函数定义,c++,c++11,scope,namespaces,function-declaration,C++,C++11,Scope,Namespaces,Function Declaration,我在函数“main”中得到这个/tmp/ccnL7Yz1.o: main.cpp:(.text+0x70):对“dng::genDungeon()”的未定义引用 main.cpp:(.text+0xf0):对“dng::clrDungeon(char**)”的未定义引用 collect2:error:ld在我试图编译程序时返回了1个退出状态错误。在我添加名称空间函数之前,它工作得很好。我是这样编译的:g++-std=c++11 main.cpp Dungeon.cpp 地牢 地牢 main.cp
/tmp/ccnL7Yz1.o:
main.cpp:(.text+0x70):对“dng::genDungeon()”的未定义引用
main.cpp:(.text+0xf0):对“dng::clrDungeon(char**)”的未定义引用
collect2:error:ld在我试图编译程序时返回了1个退出状态
错误。在我添加名称空间函数之前,它工作得很好。我是这样编译的:g++-std=c++11 main.cpp Dungeon.cpp
地牢
地牢
main.cpp
我还试着自己制作
.o
文件g++-std=c++11-c main.cpp
g++-std=c++11-c Dungeon.cpp
,然后链接它们,但得到了相同的错误。有什么问题吗 将函数定义包含在声明它们的名称空间dng中
#include "Dungeon.h"
namespace dng
{
char** genDungeon()
{
//Stuff
}
void clrDungeon(char** dungeon)
{
//Another Stuff
}
//...
}
或者使用限定名称
include "Dungeon.h"
using namespace dng;
//...
char** dng::genDungeon()
{
//Stuff
}
void dng::clrDungeon(char** dungeon)
{
//Another Stuff
}
否则,函数在全局名称空间中定义,因此,您声明了四个函数:两个在名称空间
dng
中,另外两个在全局名称空间中。您可以先搜索一下:我投票重新打开它。原来的标题有重复的味道,但问题实际上是对使用名称空间的误解。
@ББСССССССССааааru.stackoverflow:@zenith我搜索了很多,但没有找到任何类似的内容。看起来你的链接并没有为我的问题提供解决方案。回答明显重复的问题会鼓励你创建它们。不要这样做。@Mateusz Grzejek我很抱歉。我不明白你说的话。你不需要使用名称空间dng代码>在第二种情况下。@MateuszGrzejek我不认为它是重复的。@VladfromMoscow哦,你是说这个。在C++中,你通常称之为“源文件”,而不是“模块”。
#include "Dungeon.h"
int main ()
{
//Stuff
auto dungeon = dng::genDungeon();
//Stuff
dng::clrDungeon(dungeon);
return 0;
}
#include "Dungeon.h"
namespace dng
{
char** genDungeon()
{
//Stuff
}
void clrDungeon(char** dungeon)
{
//Another Stuff
}
//...
}
include "Dungeon.h"
using namespace dng;
//...
char** dng::genDungeon()
{
//Stuff
}
void dng::clrDungeon(char** dungeon)
{
//Another Stuff
}