Jac*_*k F 5 c++ templates makefile
所以我想要一起编译几个文件.其中一个是包含stack.cpp的stack.h.
以下是我的头文件:
#include<iostream>
#ifndef STACK_H
#define STACK_H
template <class ItemType>
class StackType
{
public:
//code
private:
//code
};
#include "stack.cpp"
#endif
Run Code Online (Sandbox Code Playgroud)
以下是stack.cpp:
#include "stack.h"
#include <iostream>
using namespace std;
template<class ItemType>
StackType<ItemType>::StackType(){
top = -1;
MAX_ITEMS = 200;
}
//other codes
}
Run Code Online (Sandbox Code Playgroud)
当我说它我正在重新定义stack.cpp中的代码
以下是我的Makefile:
main.o: main.cpp stack.h
g++ $(CFLAGS) -c -o main.o main.cpp
stack.o: stack.cpp stack.h
g++ $(CFLAGS) -c -o stack.o stack.cpp
Run Code Online (Sandbox Code Playgroud)
我不知道问题是什么.
你不应该尝试编译stack.o.这是需要包含在客户端代码中的模板代码,无法构建.只需将stack.cpp依赖项添加到main.o规则中(假设main.cpp包含stack.h,并删除stack.o规则:
main.o: main.cpp stack.h stack.cpp
g++ $(CFLAGS) -c -o main.o main.cpp
Run Code Online (Sandbox Code Playgroud)
您还有一个问题,那就是您包含stack.hin stack.cpp,反之亦然.您应该删除#include stack.h的stack.cpp.
由于模板代码不应该自己编译,我建议将后缀更改stack.cpp为其他内容,例如.icpp.