错误 - 无需匹配功能,将类别为属性C 呼叫
Error - No matching function to call for with class as attribute c++
我知道这已经被问到很多次了,但是我没有发现解决问题的东西。我的标题文件类似:
#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;
但是,明确的一个可能已经足够了,如果不是,您绝对想阅读三个规则?四(一个半)的规则是什么?
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 呼叫运营商<<临时
- C++概念:如何使用'concept'检查模板化结构的属性?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- MSVC是否支持C++11样式的属性而不是__declspec
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 类的C++属性似乎已重新初始化
- Qt Quick-如何仅从c++代码与qml属性交互
- 用概念检查属性的类型
- C++如何将同一类的实例作为属性
- 按多个属性排序
- 主函数参数的属性
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- C++删除未使用的类属性会导致 std::logic_error
- 无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
- 使用内存地址访问结构的属性值
- C++调用具有 *this 属性的单个帮助程序函数
- C++ 在堆栈中包含多态属性的类对象存储
- 错误 - 无需匹配功能,将类别为属性C 呼叫