链接时未定义的函数引用

时间:2016-03-17 09:35:29

标签: c++ linker

尝试使c ++程序拆分一行并创建2 std::vector以保存所述行中的元素。 这是我打电话的功能:

void readConf(const char *name, std::vector<t_objectLibrary> libs, std::vector<IObject *> &objs, std::vector<IObject *> &timer)

我放在config.hpp里面,它有原型:

void readConf(const char *name, std::vector<t_objectLibrary> libs,std::vector<IObject *> &objs, std::vector<IObject *> timer);

在主要内容我称之为:

int main(int ac, char **av)
{
  std::vector<IObject *>        objs;
  std::vector<IObject *>        timer;
  std::vector<t_objectLibrary>  libs;
  libs = lib_read("./src/objectLibrary");
  readConf("config.txt", libs, objs, timer); 
...
}

但是当我使用Makefile编译时,我收到此错误消息。一切都很好,直到编译的最后一条消息,它说: enter image description here

这是我使用的Makefile(在评论中提问):

11 │ SRC     =       src/getvalue.cpp \
12 │                 src/iobject.cpp \
13 │                 src/attributes.cpp \
14 │                 src/dynamic_lib.cpp \
15 │                 src/config.cpp \
16 │                 src/color.cpp \
17 │                 src/main.cpp
18 │ 
19 │ OBJ     =       $(SRC:.cpp=.o)
20 │ 
21 │ NAME    =       conf
22 │ 
23 │ CXX     =       g++ -std=c++11 -Wall -Wextra -lsfml-graphics -lsfml-window -lsfml-system -fPIC
24 │ 
25 │ RM      =       rm -f
26 │ 
27 │ all:    $(NAME) $(OBJ)
28 │ 
29 │ $(NAME):        $(OBJ)
30 │                 $(CXX) $(OBJ) -o $(NAME) -ldl
31 │ 
32 │ clean:
33 │                 $(RM) $(OBJ)
34 │ 
35 │ fclean: clean
36 │                 $(RM) $(NAME)
37 │ 
38 │ re:     fclean all
39 │ 
40 │ .phony: all clean fclean re

2 个答案:

答案 0 :(得分:2)

hpp中的函数签名与声明中的函数签名不完全匹配。

答案 1 :(得分:0)

如需进一步阅读,请考虑another SO thread。 在你的情况下,也许是一个拼写错误(hpp中的检查方法签名)。 HTH