我是C 中的新手,我有此代码:
#include "passenger.h"
#include "plane_list.h"
int main(){
plane_list<T>::plane_list();
plane_list<T>::add();
}
我听不懂,我似乎也无法在网上找到答案,为什么我会遇到这些错误:
错误:在此范围中未声明" t"
bame_list :: blane_list((;错误:模板参数1是无效的
bame_list :: blane_list((;错误:在";"之前声明中的无效类型
phane_list :: phane_list((;错误:‘:: add'尚未声明
bame_list :: add((;
这是标题文件:
template <class T> class plane_list{
friend class planes;
public:
plane_list();
~plane_list();
int search(const std::string &flight_code);
plane_list<T> del(const std::string &flight_code);
plane_list<T> add();
private:
T *element;
int length;
};
template <class T> plane_list<T>::plane_list(){
element = new T[100];
length=0;
}
template <class T> int plane_list<T>::search(const std::string &flight_code){
for(int i=0;i<length;i++)if(element[i]._flight_code==flight_code)return i;
return 0;
}
template <class T> plane_list<T> plane_list<T>::del(const std::string &flight_code){
if(search(flight_code)!=0){
for(int i=search(flight_code); i<length; i++)element[i-1]=element[i];
length--;
return *this;
}
else
std::cerr<<"Did not find flight"<<std::endl;
}
template <class T> plane_list<T> plane_list<T>::add(){
element[length]=planes::planes();
length++;
return *this;
}
任何帮助将不胜感激。
问题是没有类型T
。我假设plane_list
是这样的模板类:
template<typename T>
class plane_list{
//...
}
在这里,Typename T
是某种类型的占位符,当您实例化类时将提供。
您正在遇到错误,因为您正在尝试使用不存在的类型实例化plane_list
。
要正确使用您的课程,您需要将T更改为其他类型:
//for example you could use an int
int main(){
plane_list<int>::plane_list();
plane_list<int>::add();
}
不知道plane_list.h
的内容,我无法推断您实际尝试做的事情。
编辑:
如评论所建议的。您正在使用错误的语法来实例化和使用变量。正确的用法是:
int main(int argc, char** argv){
//create a variable of type plane_list<int> names "list:
plane_list<int> list; //default constructor is called automatically
list.add(); ///call the member function "add"
}
此外,您的代码具有内存泄漏,您可以通过在构造函数中调用new
来分配数组"元素",但切勿在任何导致泄漏的地方调用delete element
。有几种解决此问题的方法:
- 添加一个破坏者并在其中调用
delete element
。 - 如果需要调整数组大小,请使用
std::vector<T>
。 如果您需要一个确定的运行时长度的固定长度阵列,请使用
std::unique_ptr<T>
。不要使用动态内存,因为您要分配具有编译时间大小的数组。
我不会提供其中的每个示例,但是我建议阅读C 中的内存管理。
遍历您的标题,并确保纠正您的函数调用语法。在几个地方,您在同类中使用了相同的错误语法。例如:
template <class T> plane_list<T> plane_list<T>::add(){
//element[length]=planes::planes();
element[length]=planes{}; //default initialize a "planes" object
length++;
return *this;
}