c++ - 如何为模板化对象创建模板向量?VS正在抛出C3203
问题描述
你好我已经创建了一个模板
下面是头文件:
#pragma once
#include <iostream>
using namespace std;
template <class T>
class Airplane {
private:
T model;
int counter;
public:
Airplane(T model);
};
.cpp 文件:
#include "pch.h"
#include "Airplane.h"
#include <string>
template <class T>
Airplane<T>::Airplane(T model) {
if (&model != NULL)
this->model = model;
this->counter = 1;
}
然后创建了一个可以接受任何数据类型的集合模板或我创建的模板 Airplane,但该集合必须包含唯一的对象。
设置头文件:
#pragma once
#include <vector>
#include <iostream>
using namespace std;
template <class T>
class set {
private:
vector <T> setvector;
public:
set();
void insert(T obj);
};
设置 .cpp 文件:
#include "pch.h"
#include "set.h"
#include <iterator>
template <class T>
set<T>::set() {
class vector<T>::iterator vi = this->setvector.begin();
}
template <class T>
void set<T>::insert(T obj) {
if (this->setvector.empty()) {
this->setvector.push_back(obj);
}
else {
class vector<T>::iterator vi = this->setvector.begin();
bool flag = false;
while (vi != this->setvector.end()) {
if (*vi == obj) {
flag = true;
break;
}
vi++;
}
if (flag == false)
this->setvector.push_back(obj);
}
在主要方法中,当我尝试使用 int 或 doulbe 使用集合时,它工作得很好,但是当我尝试使用我的模板“飞机”实例化一个新集合时,VS 抛出错误
C3203 'Airplane': unspecialized class template can't be used as a template argument for template parameter 'T', expected a real type.
我试图为我的模板创建一个专业化,但 c++ 仍然不会接受它,因为它看起来像是一个模板。我已经尝试template <template <class> class T>
在设置模板中使用,但仍然无法正常工作。
解决方案
1)你不应该使用
using namespace std;
在头文件中。
2) 模板应该在头文件中定义,而不是在 cpp 文件中。你可以在这里读到
3)你的问题,看来你试图打电话
set<Airplane> s;
set
是一个采用某种类型的类模板。您的代码适用于int
并且double
因为它们是类型。
Airplane
不是类型。它是模板,您可以通过实例化模板从模板中获取类型,因此您需要在模板参数列表(<>
)中为飞机提供一个参数。
Airplane<int>
例如,如果您想拥有set
对象Airplane<int>
,请编写:
set< Airplane<int> > mySet;
此外,您必须添加operator==
用于比较 Airplanes 对象。没有它,您将
if (*vi == obj) {
在insert
方法中的这一行中遇到错误。
推荐阅读
- mysql - MYSQL,错误 1062
- regex - 从powershell字符串中提取整数
- javascript - firebase auth 不是一个函数
- scala - 如何用值“未定义”替换值“未知”?
- sql - Pentaho (spoon):为 SQL 中的多行生成主键
- reactjs - 什么是用于快照测试的 react-scripts Jest 默认序列化程序?
- android - Firebase-ui 错误
- asp.net-mvc - 如何使用带有局部视图的 ViewModel
- node.js - 将 jBPM 与 Node.js 和 PostgreSQL 集成
- c - 以递归方式打印具有其他列表(相同结构)元素的列表