1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\list(1194): error C2451: conditional expression of type 'void' is illegal
1> Expressions of type void cannot be converted to other types
1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\list(1188) : while compiling class template member function 'void std::list<_Ty>::remove(const _Ty &)'
1> with
1> [
1> _Ty=ServerLoginResponseCallback
1> ]
1> c:\users\shawn\edu\csclient\ConfigurationServerClient.h(56) : see reference to class template instantiation 'std::list<_Ty>' being compiled
1> with
1> [
1> _Ty=ServerLoginResponseCallback
1> ]
这是生成错误的代码...
typedef std::shared_ptr<protocols::ServerLoginResponse> ServerLoginResponsePtr;
typedef std::function<void (ServerLoginResponsePtr)> ServerLoginResponseCallback;
typedef std::list<ServerLoginResponseCallback> ServerLoginResponseCallbackList;
因此,我们有一个函子列表,这些函子返回void并采用了shared_ptr类型的参数。有谁知道为什么MSVC编译器有麻烦?
最佳答案
看来您在实例化方面遇到了问题。我刚刚尝试重现您的错误,但我的MSVC成功地编译了此代码。
请向我们显示更多代码))例如,向我们显示创建后如何使用此列表。
关于c++ - MSVC 2010模板编译器问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3348419/