C++ c+;目录中文件的未定义引用错误+;

C++ c+;目录中文件的未定义引用错误+;,c++,undefined-reference,C++,Undefined Reference,我正在做一个项目,在项目内部,我将自己的类和函数分离到一个名为base_lib的目录中。在编译项目时,我不断收到此库中某个类的未定义引用错误。我一直试图在许多不同的论坛上找到答案,最终决定自己去问。守则: stack.h #ifndef __STACK_H #define __STACK_H namespace stacker { /******* My code here *******/ } #endif stack.cpp #include "stack.h" #include

我正在做一个项目,在项目内部,我将自己的类和函数分离到一个名为base_lib的目录中。在编译项目时,我不断收到此库中某个类的未定义引用错误。我一直试图在许多不同的论坛上找到答案,最终决定自己去问。守则:

stack.h

#ifndef __STACK_H
#define __STACK_H


namespace stacker
{
/*******
My code here
 *******/
}


#endif
stack.cpp

#include "stack.h"
#include <iostream>

using namespace std;

template <typename var>
stacker::Stack<var>::Stack()
{
    head = nullptr;
    tail = nullptr;
}
#包括“stack.h”
#包括
使用名称空间std;
样板
堆栈器::堆栈::堆栈()
{
水头=零PTR;
tail=nullptr;
}
修正

\ifndef\uuu FIX\H
#定义固定
#包括
#包括
名称空间修复
{
/*******
我的代码在这里
*******/
}
#恩迪夫
fix.cpp

#include "fix.h"
#include "base_lib/stack.h"
#include <iostream>
#include <string>


using namespace std;
using namespace stacker;
#包括“fix.h”
#包括“base_lib/stack.h”
#包括
#包括
使用名称空间std;
使用名称空间堆栈器;
main.cpp

#include <iostream>
#include "fix.h"
#include "base_lib/functions.h"

using namespace fixes;
using namespace mine;
using namespace std;
#包括
#包括“fix.h”
#包括“base_lib/functions.h”
使用名称空间修复;
使用名称空间地雷;
使用名称空间std;
编译器错误

C:\...:fix.cpp:(.text+0xa2): undefined reference to `stacker::Stack<char>::Stack()'
...
C:\…:fix.cpp:(.text+0xa2):对“stacker::Stack::Stack()”的未定义引用
...

有人有什么窍门或窍门吗?

你似乎在C++文件中有模板而不是头文件。

这意味着模板将不会编译,因此会出现错误


阅读此处:

全局命名空间中以双下划线开头的标识符、以下划线后跟大写字母开头的标识符以及以下划线开头的标识符都是保留的。使用它们会导致未定义的行为,因此请更改标题保护宏的名称。我只是在过去10-15分钟内添加了这些宏。不幸的是,它不是问题的解决方案。仅仅因为它没有导致这个特定的问题并不意味着它不是问题。你的代码因为这个而有未定义的行为,这意味着C++标准对程序的行为没有任何限制。您永远不知道何时使用保留标识符可能会导致一些奇怪的神秘错误,因为它与系统定义的标识符冲突。我以前在这里见过这种情况。
C:\...:fix.cpp:(.text+0xa2): undefined reference to `stacker::Stack<char>::Stack()'
...