C++ 如何修复此类模板错误?

C++ 如何修复此类模板错误?,c++,class,templates,methods,C++,Class,Templates,Methods,这是我第一次尝试使用类模板(我对C++非常陌生) 我试图创建一个非常简单的Number类。首先,我创建了一个ToString方法。现在,出于测试目的,我只想ToString返回字符串“testing” 当我运行代码时,出现以下错误: 架构x86_64的未定义符号: “Number::ToString()”,引用自: _主音中的主音 ld:找不到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用) 制造:**[build/ml]错误1 这是我的代码,感谢您的帮助:

这是我第一次尝试使用类模板(我对C++非常陌生)

我试图创建一个非常简单的
Number
类。首先,我创建了一个
ToString
方法。现在,出于测试目的,我只想
ToString
返回字符串
“testing”

当我运行代码时,出现以下错误:

架构x86_64的未定义符号: “Number::ToString()”,引用自: _主音中的主音 ld:找不到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用) 制造:**[build/ml]错误1

这是我的代码,感谢您的帮助:

main.cpp

#include "number.h"

int main(int argc, char* argv[]) {
    Number<int> x(15);
    x.ToString();
    return 0;
}
#包括“number.h”
int main(int argc,char*argv[]){
数字x(15);
x、 ToString();
返回0;
}
编号: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
\ifndef\u编号_
#定义\u编号_
#包括
模板
班号{
私人:
T m_val;
公众:
数字(T val):m_val(val){};
std::string ToString();
};
#恩迪夫
编号.cpp

#include "number.h"

template<class T> 
std::string Number<T>::ToString() {
    return std::string("testing");  
}
#包括“number.h”
模板
std::string Number::ToString(){
返回标准::字符串(“测试”);
}

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


请参见

与普通代码不同,您必须将模板完全放在头文件中。(这是一种简化,但也是最简单的解决方案)将
ToString
作为常量函数。您不需要用
std::string
包围报价,您真的建议OP在另一个.cpp文件中包含一个.cpp文件吗?最后我把ToString的函数定义移到number.h中