如何修复这个类模板错误

How to fix this class template error?

本文关键字:错误 何修复      更新时间:2023-10-16

这是我第一次尝试使用类模板(我是c++新手)

我想创建一个非常简单的Number类。首先,我要创建一个ToString方法。到目前为止,出于测试目的,我只想让ToString返回字符串"testing"

当我运行我的代码时,我得到以下错误:

Undefined symbols for architecture x86_64: "Number<int>::ToString()", 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: *** [build/ml] Error 1

这是我的代码,任何帮助是感激的:

main.cpp

#include "number.h"
int main(int argc, char* argv[]) {
    Number<int> x(15);
    x.ToString();
    return 0;
}

number.h

#ifndef _NUMBER_
#define _NUMBER_
#include <iostream>
template <class T> 
class Number {
    private:
        T m_val;
    public:
        Number(T val) : m_val(val) {};
        std::string ToString();
};
#endif

number.cpp

#include "number.h"
template<class T> 
std::string Number<T>::ToString() {
    return std::string("testing");  
}

尝试在main.cpp中包含number.cpp(作为临时解决方案),而不是包含number.h。或者将ToString()的函数定义移到number.h中,只使用number.h

参见为什么模板只能在头文件中实现?