我正在用C ++编程,在构建测试程序时遇到了一些问题。
我得到的错误如下:
interconnect.cpp:78: undefined reference to 'void pop_front<request(std::vector<request, std::allocator<request> >&)'
现在我有多个相互包含的文件,如下所示。
buffer.cpp
包括common.hpp
和buffer.hpp
buffer.hpp
包括common.hpp
并具有#pragma once
common.cpp
包括common.hpp
,并将pop_front()
的定义为:template<typename T>
void pop_front(std::vector<T> &v) {...}
common.hpp
包括具有#pragma once
并具有struct request
的定义和函数pop_front()
的声明为:struct request {...}
typedef struct request request;
//...
template<typename T>
void pop_front(std::vector<T> &v);
cpu.cpp
包括common.hpp
和cpu.hpp
cpu.hpp
包括common.hpp
并具有#pragma once
interconnect.cpp
包括common.hpp
和interconnect.hpp
interconnect.hpp
包括common.hpp
并具有#pragma once
,以及pop_front()
的声明为:template<typename T>
void pop_front(std::vector<T> &v);
test.cpp
包括buffer.hpp
,common.hpp
,cpu.hpp
和interconnect.hpp
pop_front()
仅用于class Interconnect
中定义的interconnect.cpp
。
我知道一种解决方案是将pop_front()定义为class Interconnect
中interconnect.cpp
的一种方法,但是我想知道一种可扩展性更高的解决方案,当我有更多文件使用功能pop_front()
。
要进行编译,我使用了在Linux中如下所示的Makefile。
all: main
CC = g++
CFLAGS = -g
OBJS1 = buffer.cpp common.cpp cpu.cpp interconnect.cpp test.cpp
test1: buffer.cpp buffer.hpp common.cpp common.hpp cpu.cpp cpu.hpp interconnect.cpp interconnect.hpp test.cpp
$(CC) $(CFLAGS) -o test1 $(OBJS1)
clean:
rm -f *~ *.o test1