为模板类创建一个makefile

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)

我不知道问题是什么.

jua*_*nza 7

你不应该尝试编译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.hstack.cpp.

由于模板代码不应该自己编译,我建议将后缀更改stack.cpp为其他内容,例如.icpp.