将typeid的结果分配给变量

时间:2015-09-05 16:30:31

标签: c++ visual-c++ rtti typeid

我正在试图弄清楚如何将public interface Merger { public Collection<T> merge(Collection<T> left, Collection<T> right, Comparator comparator); public void addListener(Observer observer); public void notifyListener(Message message); } public interface Observer { public void notify(Message message); } 与Microsoft C ++ 2015结合使用。https://msdn.microsoft.com/en-us/library/fyf39xec.aspx的示例按原样运行,但是当我添加一个看似无害的额外行时,编译器会给出一个错误。

typeid

最后一行// compile with: /GR /EHsc #include <iostream> #include <typeinfo.h> class Base { public: virtual void vvfunc() {} }; class Derived : public Base {}; using namespace std; int main() { Derived* pd = new Derived; Base* pb = pd; cout << typeid( pb ).name() << endl; //prints "class Base *" cout << typeid( *pb ).name() << endl; //prints "class Derived" cout << typeid( pd ).name() << endl; //prints "class Derived *" cout << typeid( *pd ).name() << endl; //prints "class Derived" auto t = typeid(pb); } 是我添加的,错误是

auto t = typeid(pb);

如果整个事情都失败了,我会不会感到惊讶,但如果最后一行没有,我不会看到剩下的工作如何。我错过了什么?

1 个答案:

答案 0 :(得分:3)

啊,这只是因为auto试图复制引用的对象,这在这里无法完成。如果你改为说auto&,那就行了。