提供所有源文件后,对C ++中函数的未定义引用

时间:2019-07-15 07:34:27

标签: c++ header-files undefined-reference

我正在用C ++编程,在构建测试程序时遇到了一些问题。

我得到的错误如下:

interconnect.cpp:78: undefined reference to 'void pop_front<request(std::vector<request, std::allocator<request> >&)'

现在我有多个相互包含的文件,如下所示。

  1. buffer.cpp包括common.hppbuffer.hpp
  2. buffer.hpp包括common.hpp并具有#pragma once
  3. common.cpp包括common.hpp,并将pop_front()的定义为:
template<typename T>
void pop_front(std::vector<T> &v) {...}
  1. common.hpp包括具有#pragma once并具有struct request的定义和函数pop_front()的声明为:
struct request {...}
typedef struct request request;
//...
template<typename T>
void pop_front(std::vector<T> &v);
  1. cpu.cpp包括common.hppcpu.hpp
  2. cpu.hpp包括common.hpp并具有#pragma once
  3. interconnect.cpp包括common.hppinterconnect.hpp
  4. interconnect.hpp包括common.hpp并具有#pragma once,以及pop_front()的声明为:
template<typename T>
void pop_front(std::vector<T> &v);
  1. test.cpp包括buffer.hppcommon.hppcpu.hppinterconnect.hpp

pop_front()仅用于class Interconnect中定义的interconnect.cpp

我知道一种解决方案是将pop_front()定义为class Interconnectinterconnect.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

0 个答案:

没有答案