问题描述
我的文件如下:
main.cpp
#include "mylib.hpp"
// template <typename T>
// T add(T a,T b)
// {
// return a + b;
// }
int main(int argc,char const *argv[])
{
int result = add(90,4);
cout << result << "\n";
return 0;
}
mylib.hpp
#ifndef MYLIB_HPP
#define MYLIB_HPP
#include <iostream>
#include <cstdlib>
#include <fstream>
using std::cout;
using std::cin;
template <class T>
T add(T a,T b);
#endif
mylib.cpp
#include "mylib.hpp"
template <class T>
T add(T a,T b)
{
return a + b;
}
Makefile
a.out: main.o mylib.o
clang++ -std=c++17 main.o mylib.o
main.o: main.cpp mylib.hpp
clang++ -c -std=c++17 main.cpp
mylib.o: mylib.cpp mylib.hpp
clang++ -c -std=c++17 mylib.cpp
没有模板,或者当我在main.cpp(无多文件程序)中使用该功能时,一切工作正常,但是当我将其拆分为多个文件时,会出现以下错误。
clang++ -c -std=c++17 mylib.cpp
clang++ -std=c++17 main.o mylib.o
Undefined symbols for architecture x86_64:
"int add<int>(int,int)",referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
make: *** [a.out] Error 1
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)