不兼容的两个 void 函数声明

Incompatible two void functions declaration

我在模板“钱包”class 中声明两个无效函数时遇到问题,它们将删除现有模板 class“CreditCard”并将其添加到向量中。编译器写道“声明不兼容”

#pragma once
#include<iostream>
#include<string>
#include"CreditCard.h"
#include<vector>
using namespace std;

template<class T>
class Wallet
{
protected: 
    vector<CreditCard<T>>cards;
public:
    Wallet(vector<CreditCard<T>>cards);
    void addCreditCard(const CreditCard card);
    void removeCreditCard(const CreditCard card);
};

template<class T>
Wallet<T>::Wallet(vector<CreditCard<T>>cards) {

}

template<class T>
void Wallet<T>::addCreditCard(const CreditCard card) {
    
}

template<class T>
void Wallet<T>::removeCreditCard(const CreditCard card) {

}

问题CreditCard是一个class模板,不同于class-type.所以我们必须指定模板参数列表以使其成为类型。

解决,您可以将模板参数指定给CreditCard,如下所示:

template<class T>
class Wallet
{
protected: 
    vector<CreditCard<T>>cards;
public:
    Wallet(vector<CreditCard<T>>cards);
//-------------------------------------vvv------------>specify template argument explicitly
    void addCreditCard(const CreditCard<T> card);
//----------------------------------------vvv------------>specify template argument explicitly
    void removeCreditCard(const CreditCard<T> card);
};
template<class T>
//--------------------------------------------vvv---------->specify template argument
void Wallet<T>::addCreditCard(const CreditCard<T> card) {
    
}

template<class T>
//-----------------------------------------------vvv---------->specify template argument
void Wallet<T>::removeCreditCard(const CreditCard<T> card) {

}

Demo.