错误 - 无需匹配功能,将类别为属性C 呼叫

Error - No matching function to call for with class as attribute c++

本文关键字:属性 呼叫 功能 错误      更新时间:2023-10-16

我知道这已经被问到很多次了,但是我没有发现解决问题的东西。我的标题文件类似:

#include Myclass2.h
class Myclass{
public:
    Myclass2 instance;
   ... 
    Myclass(Myclass2 instance, param1, ecc.);

当实现文件(其他方面)仅实现构造函数:

Myclass::Myclass(Myclass2 instance,...){
this->instance = instance;

基本上,我想访问类中的实例对象,但我担心这不是正确的方法,因为它不会与错误编译",''没有匹配函数来呼叫myClass2 :: myclass2()和然后它抱怨MyClass2进行了多个参数(因为它是),我提供了0。

但我不是在班上构造它,我只想将已经创建的对象带入构造函数!

关于如何解决错误或问题的任何想法?谢谢!

编辑

class Myclass2{
public:
    Myclass2(param1, param2, param3, param4);
 } 

正如其他人在评论中所说的那样,> > ,并复制 myClass2 和myclass的构造函数。我们看不到实际代码,但我认为此示例会有所帮助:

class Myclass2 {
public:
    Myclass2() = default;
    Myclass2(int const& x) : x(x) {}
    Myclass2(Myclass2 const& myclass2) : Myclass2(myclass2.x) {}
    int x;
};
class Myclass{
public:
    Myclass() : instance() {}
    Myclass(Myclass2 const& instance) : instance(instance) {}
    Myclass(Myclass const& myclass) : Myclass(myclass.instance) {}
    Myclass2 instance;
};

在某些情况下,明确生成的默认构造函数被禁用(例如,当我们声明自己的构造函数时,更多信息http://en.cppreference.com/w/cpp/language/default_constructor),因此我们必须再次写它们。我们需要创建构造函数Myclass2() : ...,以便默认初始化,例如Myclass2 myclass;,如果类的所有成员都是默认的构造,我们可以通过声明Myclass2() = default; (C 11)

您的代码this->instance = instance;中的行似乎是成员初始化列表中的某些内容 - 它甚至在构造函数之前都将成员初始化,因此您可以拥有const成员,否则您将无法初始化。语法是:

Myclass(Myclass2 instance) : instance(instance) {
// the rest of constructor, where you can do what you want with already initialized instance
}

不必担心instance(instance)语法,它识别出什么是什么(尽管有些人认为同一名称有些混乱)。另外,正如其他人指出的那样,如果您不以myClass2实例为参考,则您正在创建临时副本,并且没有MyClass2的复制构造函数。

复制构造函数(对于Myclass,仅是Myclass const& instance参数的一个)是当我们想初始化诸如Myclass myclass(otherMyclass);的类时,我们使用的是我们使用的。

例如,通过Myclass(something) : Myclass() {}委派构造函数很常见。

(有关何时需要创建哪些可以在http://en.cppreference.com/w/上找到的信息)

有时我们也可能需要创建复制分配运营商(http://en.cppreference.com/w/cpp/language/copy_assignment),因此我们可以做:

Myclass m1;
Myclass m2;
m2 = m1;

但是,明确的一个可能已经足够了,如果不是,您绝对想阅读三个规则?四(一个半)的规则是什么?