我正在试图弄清楚如何将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);
如果整个事情都失败了,我会不会感到惊讶,但如果最后一行没有,我不会看到剩下的工作如何。我错过了什么?
答案 0 :(得分:3)
啊,这只是因为auto
试图复制引用的对象,这在这里无法完成。如果你改为说auto&
,那就行了。