我在Arduino上使用cpp。我们说我的变量定义为
ClassName o;
我不确定这里到底发生了什么,但看起来像是在现场创建对象,寻找没有参数的默认构造函数。我没有这样的默认构造函数,因此错误:
no matching function for call to "ClassName::ClassName()"
但是,如果我添加一个指向变量的指针,那么一切都很好:
ClassName* o;
这里发生了什么?推荐使用这些样式的方法是什么?
答案 0 :(得分:4)
我不确定这里到底发生了什么,但看起来像是在现场创建对象,寻找没有参数的默认构造函数。我没有这样的默认构造函数,因此错误。
正好这里发生了什么。如果声明一个这样的变量,它会立即创建。如果构造函数需要参数 - 只需在声明中提供它们:
Class o(arg);
如果你还没有获得arg
的值 - 只需推迟声明变量,直到你有。如果你真的必须推迟创建对象直到很久以后,使用:
std::unique_ptr<Class> o; // This declare a unique ptr and
// initializes it to empty.
....
o = make_unique<Class>(arg); // Create the object on the heap,
// and store the pointer in 'o'.
当o
超出范围时,对象将被销毁(确定性地)。
对于初学者,只是不要使用原始指针。他们太容易出错了。
答案 1 :(得分:0)
似乎该类未声明默认构造函数。也许它只有带参数的构造函数。
如果要声明类的对象(如
),则必须声明默认构造函数ClassName o;
对于指针声明,它只声明一个指针,不会创建该类的对象。