首页 > 解决方案 > 如何为模板化对象创建模板向量?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>在设置模板中使用,但仍然无法正常工作。

标签: c++templates

解决方案


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方法中的这一行中遇到错误。


推荐阅读