Possible Duplicate:
Undefined reference error for template method
您好,我有此代码给我这个错误:
未定义对MyStack :: push(int)main.cpp的引用
为什么??
MyStack.h:
#ifndef STACK_H
#define STACK_H
template <typename T>
class MyStack
{
private:
T *stack_array;
int count;
public:
void push(T x);
void pop(T x);
void xd(){}
};
#endif /* STACK_H */
MyStack.cpp:
#include "mystack.h"
template <typename T>
void MyStack<T>::push(T x)
{
T *temp;
temp = new T[count];
for(int i=0; i<count; i++)
temp[i] = stack_array[i];
count++;
delete stack_array;
stack_array = new T[count];
for(int i=0; i<count-1; i++)
stack_array[i] = temp[i];
stack_array[count-1] = x;
}
template <typename T>
void MyStack<T>::pop(T x)
{
}
main.cpp:
#include <iostream>
#include "mystack.h"
using namespace std;
int main(int argc, char *argv[])
{
MyStack<int> s;
s.push(1);
return 0;
}
最佳答案
类模板成员的定义必须在同一文件中,但是您已在其他文件(MyStack.cpp
)中对其进行了定义。
一个简单的解决方案是,在MyStack.h
文件的末尾添加以下行:
#include "MyStack.cpp" // at the end of the file
我知道这是
.cpp
文件,但是可以解决您的问题。也就是说,您的
MyStack.h
应该如下所示:#ifndef STACK_H
#define STACK_H
template <typename T>
class MyStack
{
private:
T *stack_array;
int count;
public:
void push(T x);
void pop(T x);
void xd(){}
};
#include "MyStack.cpp" // at the end of the file
#endif /* STACK_H */
如果这样做,则
#include "mystack.h"
中不再需要MyStack.cpp
。您可以删除它。