我有两个类Term和Polynomial。 Polynomial类被声明为Term类的朋友。多项式类有友方功能。当我在Polynomial类的cpp文件中实现该函数时,不会访问Term的私有成员。虽然Polynomial类被声明为它的朋友。我只需要在该函数中访问Term的私有成员。有帮助吗?这是我的代码:
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.
}
}
我得到的错误是在&#34; exp&#34;如果在+的重载函数的条件下,它是不可访问的。
答案 0 :(得分:2)
exp
无法在operator+
内访问,因为友情不可传递(wikipedia):
如果A班是B班的朋友,而B班是C班的朋友, A类不会自动成为C类的朋友。
这也适用于朋友功能。您还必须将friend
声明添加到Term
或提供访问者功能。
答案 1 :(得分:0)
operator +函数实际上并不是Polynomial类的一部分,因为它是一个友元函数。
https://msdn.microsoft.com/en-us/library/465sdshe.aspx
请参阅“朋友功能”部分。
答案 2 :(得分:0)
您的免费功能 Polynomial operator+(const Polynomial &a, const Polynomial&b)
不是Term
的成员,因此可以访问私人,也不允许其成为朋友{{} 1}}(只有朋友,而且不是传递性的),因此也无法以这种方式访问Polynomial
的内部。
要么使其成为Term
的成员才能利用现有的朋友关系,或者最好将其设为Polynomial
的朋友。
有一个偷偷摸摸的第三种选择,虽然你可能不想要它,这是在Term
中内联定义,但保留它是一个自由函数。
答案 3 :(得分:0)
ruby requierer.rb # => /home/__user__/Desktop/requierer.rb
正在尝试访问Polynomial operator+(const Polynomial &a, const Polynomial&b)
而非Term
类的私人成员。
所以Polynomial
也必须是Polynomial operator+(const Polynomial &a, const Polynomial&b)
的朋友。