链接器无法在命名空间中找到函数定义
Linker can't find function definition in a namespace
我在尝试编译我的程序时遇到此 /tmp/ccnL7Yz1.o: In function 'main':
main.cpp:(.text+0x70): undefined reference to 'dng::genDungeon()'
main.cpp:(.text+0xf0): undefined reference to 'dng::clrDungeon(char**)'
collect2: error: ld returned 1 exit status
错误。在我添加命名空间函数之前它工作得很好。我正在这样编译它:g++ -std=c++11 main.cpp Dungeon.cpp
Dungeon.h
namespace dng {
char** genDungeon();
void clrDungeon(char**);
class Dungeon {
//Methods and variables
}
}
Dungeon.cpp
#include "Dungeon.h"
using namespace dng;
char** genDungeon()
{
//Stuff
}
void clrDungeon(char** dungeon)
{
//Another Stuff
}
/*Implementation of class methods
void Dungeon::genStart(){} -> like this */
main.cpp
#include "Dungeon.h"
int main ()
{
//Stuff
auto dungeon = dng::genDungeon();
//Stuff
dng::clrDungeon(dungeon);
return 0;
}
我也试过自己制作.o
个文件g++ -std=c++11 -c main.cpp
g++ -std=c++11 -c Dungeon.cpp
然后link他们,但是得到了同样的错误。可能是什么问题?
将函数定义包含在声明它们的命名空间 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
中,另外两个在全局命名空间中。
我在尝试编译我的程序时遇到此 /tmp/ccnL7Yz1.o: In function 'main':
main.cpp:(.text+0x70): undefined reference to 'dng::genDungeon()'
main.cpp:(.text+0xf0): undefined reference to 'dng::clrDungeon(char**)'
collect2: error: ld returned 1 exit status
错误。在我添加命名空间函数之前它工作得很好。我正在这样编译它:g++ -std=c++11 main.cpp Dungeon.cpp
Dungeon.h
namespace dng {
char** genDungeon();
void clrDungeon(char**);
class Dungeon {
//Methods and variables
}
}
Dungeon.cpp
#include "Dungeon.h"
using namespace dng;
char** genDungeon()
{
//Stuff
}
void clrDungeon(char** dungeon)
{
//Another Stuff
}
/*Implementation of class methods
void Dungeon::genStart(){} -> like this */
main.cpp
#include "Dungeon.h"
int main ()
{
//Stuff
auto dungeon = dng::genDungeon();
//Stuff
dng::clrDungeon(dungeon);
return 0;
}
我也试过自己制作.o
个文件g++ -std=c++11 -c main.cpp
g++ -std=c++11 -c Dungeon.cpp
然后link他们,但是得到了同样的错误。可能是什么问题?
将函数定义包含在声明它们的命名空间 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
中,另外两个在全局命名空间中。