我有一个非常奇怪的错误:我有一对 .h 和 .cpp 文件,其中包含一些函数和常量。当我尝试编译它时,g++ 对函数说“未定义的引用”。函数原型和定义似乎是一样的。除了必要的行之外,我已经将所有内容都注释掉了,而 g++ 仍然抱怨它。
我的程序目前是(在注释掉所有内容之后):
主文件
#include "a.h"
int main(){
makehex(10);
return 0;
}
啊
#include <iostream>
#include <sstream>
#ifndef __A___
static const std::string b = "01";
static const std::string d = b + "23456789";
static const std::string h = d + "abcdef";
template <typename T> std::string makehex(T value, unsigned int size = 2 * sizeof(T));
#endif
a.cpp
#include "a.h"
template <typename T> std::string makehex(T value, unsigned int size){
// Changes a value to its hexadecimal string
if (!size){
std::stringstream out;
out << std::hex << value;
return out.str();
}
std::string out(size, '0');
while (value && size){
out[--size] = h[value & 15];
value >>= 4;
}
return out;
}
只有1个功能。我不明白这怎么会出错。
我正在编译g++ -std=c++11 main.cpp a.cpp
并得到错误:
main.cpp:(.text+0x1a): undefined reference to `std::string makehex<int>(int, unsigned int)'
collect2: error: ld returned 1 exit status
是因为模板吗?如果是这样,我该如何解决?