没有匹配的构造函数初始化问题,将指针传递给对象
no matching constructor initialization issue in passing pointer to object
我正面临参数传递对象指针的问题。(这是编译器错误)我有一个2班,为简单起见,我创建了一级和第二类。
One.h
#pragma once
#include "two.h"
class one
{
private:
two* t;
public:
one();
};
One.cpp
#include "one.h"
one::one()
{ t = new two(this);//error: No matching constructor for initialization of 'two' }
二。
#pragma once
#include "one.h"
class two
{
public:
explicit two(one*);
};
tw.cpp
#include "two.h"
two::two(one*o)
{ }
在您的.h
文件中,添加其他类的前向声明。当您彼此之间有包括标题时,实际上不会获得包含的内容,否则它们会互相扩展到无限。
因此,在one.h
中,您将拥有:
#pragma once
class two; // removed include, added forward declaration
class one
{
private:
two* t;
public:
one();
};
然后实际上在one.cpp
中进行包含,其中您需要两个
#include "one.h"
#include "two.h" // added this include
one::one()
{ t = new two(this);}
最好不要彼此包含两个标题,
您可以将#include "one.h"
分为二。H到class one;
等定义。
彼此包含两个标题,会使编译器感到困惑,并犯许多奇怪的错误。
#include
表示在其中扩展完整的标头文件。
和 #pragma once
使标头文件仅扩展一次,您可以尝试将一个内容的全部内容复制到 #include "one.h"
的位置,您会发现问题。
例如,在一个.cpp中,在扩展标头文件之后,该文件就是这样:
class two
{
public:
explicit two(one*);
};
class one
{
private:
two* t;
public:
one();
};
one::one()
{
t = new two(this);
}
由于在第二类之前没有一级的声明或定义,因此未正确声明第二类的构造函数,因此发生了错误。
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它