相关疑难解决方法(0)

带空括号的默认构造函数

有没有什么好的理由在C++中调用默认构造函数时,一组空的圆括号(括号)无效?

MyObject  object;  // ok - default ctor
MyObject  object(blah); // ok

MyObject  object();  // error
Run Code Online (Sandbox Code Playgroud)

我似乎每次都自动输入"()".是不是有一个很好的理由不允许这样做?

c++ constructor c++-faq default-constructor most-vexing-parse

192
推荐指数
8
解决办法
3万
查看次数

std::bind to std::function 转换问题

尝试std::bind()使用以下代码获取函数对象:

driver_manager driverManager();

std::function<void(mqtt::const_message_ptr,
mqtt::async_client*,callback*,sql::Driver*)> fn = std::bind(&driver_manager::test_callback, &driverManager, std::placeholders::_1, 
std::placeholders::_2, std::placeholders::_3, std::placeholders::_4);
Run Code Online (Sandbox Code Playgroud)

结果出错:

错误:从'std::_Bind_helper<false, void (driver_manager::*)(std::shared_ptr<const mqtt::message>, mqtt::async_client*, callback*, sql::Driver*), driver_manager ( *)()、const std::_Placeholder<1>&、const std::_Placeholder<2>&、const std::_Placeholder<3>&、const std::_Placeholder<4>&>::type'非标量类型 'std::function<void(std::shared_ptr<const mqtt::message>, mqtt::async_client*, callback*, sql::Driver*)>' 请求

几个小时以来,我一直试图找出问题所在,这段代码有什么问题?

编辑

driver_manager.hpp

class driver_manager{
public:
    driver_manager();
    void test_callback(mqtt::const_message_ptr, mqtt::async_client*,callback*,sql::Driver*);
};
Run Code Online (Sandbox Code Playgroud)

driver_manager.cpp

driver_manager::driver_manager(){

}

void driver_manager::test_callback(mqtt::const_message_ptr msg, mqtt::async_client *client, callback *cb, sql::Driver *driver){
    std::cout << "Callback triggered" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ stdbind std-function

6
推荐指数
1
解决办法
66
查看次数

C++ 11构造函数(大括号)的区别

我对C++很陌生并观察到,以下代码行的行为不同

MyClass c1;
c1.do_work() //works
MyClass c2();
c2.do_work() //compiler error c2228: left side is not a class, structure, or union.
MyClass c3{};
c3.do_work() //works
Run Code Online (Sandbox Code Playgroud)

头文件为

class MyClass {
public:
    MyClass();
    void do_work();
};
Run Code Online (Sandbox Code Playgroud)

你能解释一下,创建对象的三种方式之间的区别是什么?为什么第二种方式会产生编译错误?

c++ constructor most-vexing-parse c++11

4
推荐指数
2
解决办法
378
查看次数

C++创建类的实例?

可能重复:
带空括号的默认构造函数
实例化带或不带括号的类?

程序:

class Foo
{
   public:
      Foo ( int bar = 1 )
      {
         cout << "bar=" << bar;
      }
};

int main() {

   cout << "0 - ";
   Foo foo_0 ( 0 ) ;
   cout << '\n';

   cout << "1 - ";
   Foo foo_1 ();
   cout << '\n';

   cout << "2 - ";
   Foo foo_4;
   cout << '\n';

   return 0;

}
Run Code Online (Sandbox Code Playgroud)

输出:

0 - bar=0
1 - 
2 - bar=1
Run Code Online (Sandbox Code Playgroud)

问题:为什么示例#1不起作用,而示例#0和#2呢?

c++ constructor class instance default-parameters

0
推荐指数
1
解决办法
231
查看次数