不兼容的两个 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.
我在模板“钱包”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.