带有vector <std :: string>参数的C ++ undefined引用调用函数

时间:2018-05-04 00:35:21

标签: c++ vector stdvector clang++ stdstring

编辑:我按照评论中的建议运行nm -C unit.o | grep ergebnis并获得以下输出:

0000000000001210 T ergebnis(std::vector<Student, std::allocator<Student> > const&)
0000000000000350 T ergebnis(std::vector<double, std::allocator<double> > const&)
0000000000000810 T ergebnis(std::vector<std::string, std::allocator<std::string> > const&)

所以重载应该存在并且是正确的,对吗?

我有一个文件unit.o给出,它的标题如下:

#ifndef unit2b
#define unit2b

#include "student.h"
#include <iostream>
#include <vector>
#include <string>


// Funktionen zur Ueberpruefung der Ergebnisse
// geben zurueck, ob ein Fehler entdeckt wurde
bool ergebnis( const std::vector<double>& feld);
bool ergebnis( const std::vector<std::string>& feld);
bool ergebnis( const std::vector<Student>& feld);

#endif

在我的程序(sort.cpp)中,我有三个vector,一个是double类型,一个是Student类型,另一个是std :: string类型。我正在调用一些排序算法,并在此之后为每个向量调用ergebnis(x)。试图用

编译
clang++ -std=c++14 -o prog sort.cpp unit.o student.cpp

我收到以下错误:

/tmp/sort-cc51a6.o: In function `main':
sort.cpp:(.text+0x548): undefined reference to `ergebnis(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我对c ++很陌生,不了解问题所在。有趣的是,错误只发生在使用std :: string类型向量的ergebnis()调用中 - 其他两种类型工作正常。 sort.cpp中的调用:

std::ifstream ifs1 ("strings.txt", std::ifstream::in);
std::vector<std::string> v1 = {};
einlesen(ifs1, v1);
[...]
if(!(ergebnis(v1)){ ... }

问题是什么?

编辑:这不是重复。我读了另一个问题,并尝试了接受的答案中建议的所有内容。问题是,我无法访问unit.o创建的源代码。所以请删除重复的标记。

0 个答案:

没有答案