【发布时间】:2011-10-11 18:55:16
【问题描述】:
可能重复:
Why can templates only be implemented in the header file?
我已经为此苦苦挣扎了一段时间,并且在这里查看了几个问题,但是作为 C++ 新手,我无法理解我错在哪里。
这是代码,我从this page 获取并尝试使其工作,但到目前为止我还没有幸运:
stack.h
#ifndef STACK_H
#define STACK_H
template <class T>
class Stack {
public:
Stack(int n);
~Stack() { delete[] s; };
private:
T* s;
int _top;
int _size;
};
#endif // STACK_H
stack.cpp
#include "stack.h"
template <class T>
Stack<T>::Stack(int n) {
_size = n;
_top = -1;
s = new T[_size];
}
main.cpp
#include <iostream>
#include "stack.h"
using namespace std;
int main() {
Stack<int> s(10); // undefined reference to `Stack<int>::Stack(int)'
return 0;
}
当我编译 (gcc 4.5.2) 时出现一个错误:undefined reference to Stack<int>::Stack(int)。我已经尝试了几件事,但没有任何真正的知识来支持我的工作。如果有人能向我解释发生了什么,我将非常感激。
【问题讨论】:
-
好吧,它不是重复的,虽然它确实解决了我的问题。我正在寻找错误(
undefined reference),所以我之前没有找到那个问题。谢谢! -
好像有很多新人开始学习C++了……这是C++11的影响还是什么?
-
@Vlad:复制构造函数、移动构造函数、复制赋值运算符、移动赋值运算符、析构函数。 (4.5 使用复制和交换:复制构造函数、移动构造函数、赋值操作符、析构函数、交换。)
-
@GMan 我实际上是忍者在我的答案中编辑了五音符规则,弗拉德实际上指出我最初错过了它。
-
您是否尝试过使用
std::stack?