我有一个队列,我需要验证输入数据类型并处理异常,以防数据输入与队列中的数据类型相同,我该怎么做? main.cpp中
try {
cout << "Insert character: ";
cin >> ch;
prova.push(ch);
}
catch (wrong_insert& k) {
k.allert();
};
这是推送功能:
template <class t>
void queue<t>::push(const t& entry)
{
if(*I need this condition*) throw wrong_insert();
if(empty())
{
head_insert(front_ptr, entry);
rear_ptr = front_ptr;
}
else
{
insert(rear_ptr, entry);
rear_ptr = rear_ptr->link();
}
++count;
cout << "Inserted!" << endl;
}
这是异常类:
class wrong_insert
{
public:
wrong_insert() : message("Wrong data inserted!"){};
void allert(){ cout << message;};
private:
string message;
};
答案 0 :(得分:1)
我想将此作为评论添加,但我不允许这样做,因为我还没有50个声誉。
我认为如果类型错误,它将不会首先编译。
答案 1 :(得分:0)
如果我理解你的问题,你就会问你如何检查没有人试图在char
s的队列中插入一个整数。
答案是你不能,也不必在运行时这样做。由于C ++是一种强类型语言,因此无法编译数据类型不兼容的代码。完全允许将char转换为int并且不会生成错误,但是将int作为char传递可能会触发错误/警告,具体取决于具体情况。
但是请注意,在某些情况下,如果(a)使用强制转换专门要求它,或者(b)如果编译器可以知道整数的值足够小,则允许将整数传递给char适合char。这发生在编译时。 ( NB 根据您的C ++版本,此类自动转换可能会给您一个警告或错误,因此请注意您的警告。)
如果您计划将此队列与彼此继承的类一起使用,则您的问题变得更加相关,因为您可以将派生类型的对象作为基类类型的引用或指针传递。在这里你可以使用typeid
运算符,但是知道这会触发RTTI(运行时类型识别)并使用一些额外的代码来混乱你的可执行文件。
C ++只是在你使用它时付出代价&#34;如果你需要它(并且性能不会受到太大影响),请使用它。