gpt4 book ai didi

c++ - 为模板类制作 makefile

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:38 27 4
gpt4 key购买 nike

所以我有几个文件想一起编译。其中之一是包含 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

下面是stack.cpp:

#include "stack.h"
#include <iostream>
using namespace std;

template<class ItemType>
StackType<ItemType>::StackType(){
top = -1;
MAX_ITEMS = 200;
}

//other codes
}

当我让它说我正在重新定义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

我不明白是什么问题。

最佳答案

您不应尝试编译 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

您还有一个问题,那就是您在stack.cpp 中包含了stack.h,反之亦然。您应该从 stack.cpp 中删除 #include stack.h

由于模板代码不应该自己编译,所以我建议把stack.cpp的后缀改成别的,比如.icpp

关于c++ - 为模板类制作 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13792001/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com