#include <iostream>
#include <functional>
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <Wt/WServer>
Wt::WApplication *createApplication(const Wt::WEnvironment& env, int i) {
return new Wt::WApplication(env);
}
int main(int argc, char** argv)
{
Wt::WRun(argc, argv,boost::bind(&createApplication, _1, 1));
}
错误94错误C2198:&#39; Wt :: WApplication *(__ cdecl *)(const Wt :: WEnvironment&amp;,int)&#39; :调用的参数太少\ wt-3.3.4-msvs2013-windows-x86-sdk \ include \ boost \ function \ function_template.hpp 95 1
同样失败,Wt::WRun(argc, argv,std::bind(&createApplication, std::placeholders::_1, 1));
出现完全相同的错误。
我使用具有函数Wt::WRun()
的库Wt,该函数将第3个参数作为函数,在本例中为application_creator
,它返回指向Wt的指针输入并接受一个参数。到现在为止还挺好。这个函数是用户提供的,可能需要更多的参数,我这样做,并且还有一个example的lib节目(参见main.c,Wt::WSever::addEntryPoint
采用与WRun
相同的参数)。
所以我想绑定我的附加参数,如示例中所示。我的解决方案与gcc / mingw完美编译,但是使用MSVC / Visual Studio 2013 Express,它失败并出现错误
错误94错误C2198:&#39; Wt :: WApplication *(__ cdecl *)(const Wt :: WEnvironment&amp;,int)&#39; :调用的参数太少了...... include \ boost \ function \ function_template.h
我的电话:Wt::WRun(argc, argv,boost::bind(MDDB_Service::application_creator, _1, 5));
回调的定义Wt::WApplication* MDDB_Service::application_creator(const Wt::WEnvironment& env, int foo);
WT::WRun
的定义:
#define WTCONNECTOR_API __declspec(dllimport)
typedef boost::function<WApplication* (const WEnvironment&)> ApplicationCreator;
int WTCONNECTOR_API WRun(int argc, char** argv,
ApplicationCreator createApplication = 0);
与Wt::WRun(argc, argv,std::bind(MDDB_Service::application_creator, std::placeholders::_1, 5));
错误94错误C2198:&#39; Wt :: WApplication *(__ cdecl *)(const Wt :: WEnvironment&amp;,int)&#39; :调用的参数太少... include \ boost \ function \ function_template.hpp
答案 0 :(得分:2)
问题实际上不是编译器的错,而是这一行:
Wt::WEnvironment we();
它声明了一个名为we
的函数,它不带参数并返回Wt::WEnvironment
。你是the most vexing parse的受害者
用
Wt::WEnvironment we;
应该解决你的问题。