Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链接器可以';在命名空间中找不到函数定义_C++_C++11_Scope_Namespaces_Function Declaration - Fatal编程技术网

C++ 链接器可以';在命名空间中找不到函数定义

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

我在函数“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.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
}