编辑:我按照评论中的建议运行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创建的源代码。所以请删除重复的标记。