【发布时间】:2011-07-19 12:00:36
【问题描述】:
技术 1 -> 导致错误
我有三个文件MyType.h, MyType.cpp & main.cpp
MyType.h
#ifndef MYTYPE_H
#define MYTYPE_H
#include<iostream>
using namespace std;
template <class T,int iMax>
class A{
T iData;
public:
void vSetData(T iPar1);
void vDisplayData();
};
#endif
MyType.cpp
#include"MyType.h"
void A::vSetData(T iPar1){
if(iPar1 <= iMax)
iData = iPar1;
}
void A::vDisplayData(){
cout<<"\nData is: "<<iData<<endl;
}
main.cpp
#include"MyType.h"
typedef A<int,20> MyType;
int main(){
int x = 12;
MyType obj;
obj.vSetData(12);
obj.vDisplayData();
return 0;
}
错误:10 个错误。它们如下:-
- mytype.cpp(2) : 错误 C2955: 'A' : 使用类模板需要模板参数列表
- mytype.h(9) : 参见 'A' 的声明
- mytype.cpp(2) : 错误 C2955: 'A' : 使用类模板需要模板参数列表
- mytype.h(9) : 参见 'A' 的声明
- mytype.cpp(2):错误 C2065:'T':未声明的标识符
- mytype.cpp(2):错误 C2146:语法错误:标识符“iPar1”之前缺少“)”
- mytype.cpp(2):错误 C2761:'void A::vSetData(T)':不允许成员函数重新声明
- mytype.cpp(2):错误 C2059:语法错误:')'
- mytype.cpp(2):错误 C2143:语法错误:缺少 ';'在“{”之前
- mytype.cpp(2) : 错误 C2447: '{' : 缺少函数头(旧式正式列表?)
- mytype.cpp(6) : 错误 C2955: 'A' : 使用类模板需要模板参数列表
- mytype.h(9) : 参见 'A' 的声明
- mytype.cpp(6):错误 C2509:“vDisplayData”:成员函数未在“A”中声明
- mytype.h(9) : 参见 'A 的声明
技术 2 -> 工作正常。
AboveCodeInOneFile.cpp
#include<iostream>
using namespace std;
template <class T,int iMax>
class A{
T iData;
public:
void vSetData(T iPar1){
if(iPar1 <= iMax)
iData = iPar1;
}
void vDisplayData(){
cout<<"\nData is: "<<iData<<endl;
}
};
typedef A<int,20> MyType;
int main(){
int x = 12;
MyType obj;
obj.vSetData(12);
obj.vDisplayData();
return 0;
}
请让我知道我在 Technique 1
中犯了什么错误【问题讨论】:
-
执行时不会出错。您遇到了编译错误。
-
是的,我收到编译时错误。
-
@pmr - 这不是这里要问的,而是编译后的下一个问题。 :-)
-
@Bo 你是对的。我的“*.cpp + 模板”== 重复的反应在我前面。