gpt4 book ai didi

c++ - friend 功能不访问另一个 friend 类的私有(private)成员

转载 作者:行者123 更新时间:2023-11-28 02:21:32 25 4
gpt4 key购买 nike

我有两个类 Term 和 Polynomial。多项式类被声明为 Term 类的友元。多项式类中有友元函数。当我在 Polynomial 类的 cpp 文件中实现该函数时,Term 的私有(private)成员无法在那里访问。尽管 Polynomial 类被声明为它的 friend 。我只需要在该函数中访问 Term 的私有(private)成员。有什么帮助吗?这是我的代码:

Polynomial.h 文件:

#pragma once
#include "Term.h"
using namespace std;

// class polynomial;
// friend operator+(const polynomial& , const polynomial&);
class Polynomial
{
private:
Term *termArray;
int capacity;
int terms;

public:
Polynomial();
Polynomial(int, int);
friend Polynomial operator+(const Polynomial& , const Polynomial&);
};

这是我的 Term.h:

#pragma once
using namespace std;
class Polynomial;

class Term
{
friend Polynomial;

private:
int exp;
float coef;
};

这是我的 Polynomial.cpp 文件:

#include <iostream>
#include "Polynomial.h"
#include "Term.h"
using namespace std;

Polynomial::Polynomial()
{
capacity = 1;
terms = 0;
}

Polynomial::Polynomial(int cap, int noOfTerms)
{
capacity = cap;
terms = noOfTerms;
termArray = new Term[terms];
}

Polynomial operator+(const Polynomial &a, const Polynomial &b)
{
for(int i = 0; i<a.terms; i++)
for(int j=0; j < b.terms; j++)
if(a.termArray[i].exp == b.termArray[j].exp)
{
//something to do here.
}
}

我得到的错误是在“exp”处,在 + 的重载函数条件下,它是不可访问的。

最佳答案

exp 无法在 operator+ 中访问,因为友元不可传递 ( wikipedia ):

If class A is a friend of class B, and class B is a friend of class C, class A is not automatically a friend of class C.

这也适用于友元函数。您也必须将 friend 声明添加到 Term 或提供访问器函数。

关于c++ - friend 功能不访问另一个 friend 类的私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32290354/

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