没有匹配的构造函数初始化问题,将指针传递给对象

no matching constructor initialization issue in passing pointer to object

本文关键字:指针 对象 问题 初始化 构造函数      更新时间:2023-10-16

我正面临参数传递对象指针的问题。(这是编译器错误)我有一个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);
}

由于在第二类之前没有一级的声明或定义,因此未正确声明第二类的构造函数,因此发生了错误。