gpt4 book ai didi

c++ - 我可以在 friend 类中使用 THIS 指针吗?

转载 作者:行者123 更新时间:2023-11-30 00:38:51 25 4
gpt4 key购买 nike

#include <iostream>

using namespace std;

class Street;

class CrossStreet

{

private:

char m_chName;
Street* m_acLoS;
int m_nNoS;
static int m_nCSid;
public:
CrossStreet()
{
Init();
m_chName = m_nCSid;
}
CrossStreet(char chName)
{
Init();
m_chName = chName;
}

/** Problem is here **/
void AddStreet(Street* const cStreet)
{
m_acLoS[++m_nNoS] = cStreet;
}

~CrossStreet()
{
delete[] m_acList;
}

void Init()
{
m_nNoS = 0;
m_acLoS = 0;
m_nCSid++;
}

friend class Street;
};

class Street

{

private:

int m_nDistance;

public:

Street(CrossStreet& cHead, CrossStreet& cTail, int nDistance)
{
CreateStreet(cHead,cTail,nDistance);
}

void CreateStreet(CrossStreet& cHead, CrossStreet& cTail, int nDistance)
{
m_nDistance = nDistance;
cHead.AddStreet(Street* const THIS);
cTail.AddStreet(Street* const THIS);

}

};

当我编译上面的代码时,抛出错误:

-->>invalid use of incomplete 'struct Street'
-->>forward declaration of 'struct Street'

'CrossStreet'对象的AddStreet函数在'Street'对象被调用,将'THIS街道对象添加到CrossStreet对象的成员变量中。所以我想我可以在这种情况下使用 THIS 指针,但它不能编译。

最佳答案

没有THIS这样的东西指针。有一个 this虽然指针。所以你的代码在 CreateStreet无效(不仅如此)。正确的语法是:

cHead.AddStreet(this); // no cast needed

AddStreet 中的问题是你定义了m_acLoS作为指向街道的指针。所以m_acLoS[x]类型为 Street ,而不是 Street* .但是你不能使用 Street在那里反对,因为你没有 Street 的完整定义在那时候。您只能在 CrossStreet 中使用指向 Street 的指针. (此外,您缺少 m_acLoS 的存储分配,所以即使您可以在那里使用该类型,并且如果分配是合法的,它仍然是一个错误)。

根据您的需求,std::vector<Street*>std::list<Street*>或者其他一些容器可能是您正在寻找的,而不是那个不正确的成员数组。 (但请注意,您有责任管理这些指针的生命周期。)

关于c++ - 我可以在 friend 类中使用 THIS 指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9725426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com