比较两个 typeid 表达式是不是相等时出现编译器错误
Posted
技术标签:
【中文标题】比较两个 typeid 表达式是不是相等时出现编译器错误【英文标题】:Compiler error when comparing two typeid expressions for equality比较两个 typeid 表达式是否相等时出现编译器错误 【发布时间】:2017-09-11 23:31:32 【问题描述】:关于这段来自培训视频的代码:
#include <iostream>
template<typename T>
struct MyStruct
T data;
;
int main(void)
MyStruct<int> s;
s.data = 2;
assert(typeid(s.data) == typeid(int));
我得到这个编译器错误:
class_templates.cpp:12:26: error: invalid operands to binary expression ('const std::type_info' and 'const std::type_info')
assert(typeid(s.data) == typeid(int));
~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~
编译:
clang++ -std=c++14 class_templates.cpp
编辑:如果我用 g++ 编译,我会得到一个更好的错误:
class_templates.cpp:14:20: error: must #include <typeinfo> before using typeid
assert(typeid(s.data) == typeid(int));
【问题讨论】:
您必须使用#include <typeinfo>
才能使用typeid()
@Remy Answers go down there -vvvvvvv
@RemyLebeau 谢谢!这解决了它。你能把你的评论作为答案吗?
Why do I need to #include <typeinfo> when using the typeid operator?
真的,两个接近投票和反对票? SO 有时会让人难以忍受。
【参考方案1】:
您必须使用#include <typeinfo>
才能使用typeid()
,否则您的程序格式错误。
另见:
Why do I need to #include <typeinfo> when using the typeid operator?
【讨论】:
以上是关于比较两个 typeid 表达式是不是相等时出现编译器错误的主要内容,如果未能解决你的问题,请参考以下文章
C++ Primer 5th笔记(chap 19 特殊工具与技术)typeid
在 perl 中编译正则表达式时出现“reg_node overrun”