【发布时间】:2015-12-01 06:12:24
【问题描述】:
这是我第一次尝试使用类模板(我是 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;
}
数字.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
数字.cpp
#include "number.h"
template<class T>
std::string Number<T>::ToString() {
return std::string("testing");
}
【问题讨论】:
-
与普通代码不同,您必须将模板完全放在头文件中。 (这是一种简化,但最简单的解决方案)
-
使
ToString成为一个常量函数。你不需要用std::string包围引用
标签: c++ class templates methods