【发布时间】:2015-07-05 05:40:33
【问题描述】:
所以我正在为一个 c++ 类编写粒子加速器代码,但我在设置我被要求使用的初始类时遇到了问题。教授希望我们在课堂上使用模板,但是当我尝试实现它们时,我收到了一些错误。例如:
#include <iostream>
#include <cmath>
using namespace std;
template <class Type>
class ThreeVector {
private:
Type mx;
Type my;
Type mz;
public:
ThreeVector();
ThreeVector(Type x=0, Type y=0, Type z=0);
};
ThreeVector<Type>::ThreeVector() {
Type mx=0;
Type my=0;
Type mz=0;
}
ThreeVector<T>::ThreeVector(Type x, Type y, Type z) {
mx=x;
my=y;
mz=z;
}
是我的头文件的一部分(该类必须在头文件中)。当我运行我的程序时(如果需要可以提供),它给了我以下错误:
ThreeVector.h:30:13: 错误:“类型”未在此范围内声明
ThreeVector.h:30:17: 错误:模板参数 1 无效
ThreeVector.h:在函数“int ThreeVector()”中: ThreeVector.h:30:32: 错误:'int ThreeVector()' 重新声明为不同类型的符号
ThreeVector.h:6:7: 注意:之前的声明‘template class ThreeVector’
ThreeVector.h:31:2: 错误:“类型”未在此范围内声明
ThreeVector.h:32:7: 错误:在“我的”之前需要“;”
ThreeVector.h:33:7: 错误:在“mz”之前需要“;”
ThreeVector.h:在全局范围内: ThreeVector.h:35:13: 错误:“类型”未在此范围内声明
在我开始使用模板之前,这些问题并不存在,也就是说,如果我明确定义所有变量类型,我的类就可以正常工作。所以,我不太确定我的模板定义有什么问题?如果有人可以提供帮助,我将不胜感激。
谢谢!
【问题讨论】:
-
如果没有参数,应该调用哪个构造函数?
-
尝试将
template<class T>放在类外声明的方法前面。 (用模板参数中的任何说明符替换 T。) -
抱歉,快速更正:ThreeVectoor
的一个实例已更改为 ThreeVector .. 另外,模板 不是已经在类外声明了吗? -
template<...>仅适用于紧随其后的声明或定义。 -
我不知道。谢谢你的澄清,克里斯,它现在似乎工作了!
标签: c++ templates compiler-errors