//A.h
class A{
friend bool compareEntry_sumPct_nonMega(Entry arg1, Entry arg2);
}
//A.cpp
#include "A.h"
bool A::compareEntry_sumPct_nonMega(Entry arg1, Entry arg2)
{
bool b = arg1.sumOfNonMegaEntryPct(numbers) < arg2.sumOfNonMegaEntryPct(numbers);
return b;
}
我得到错误compareEntry_sum_Pct_nonMega不是A的成员。
答案 0 :(得分:1)
由于您已经定义了“friend bool compareEntry_sumPct_nonMega(Entry arg1,Entry arg2);”作为友元函数,您告诉编译器函数compareEnty_sumPct_nonMega是一个非成员函数,它应该可以访问类“A”的私有方法和变量。但是当你在A.cpp中定义函数时,你将它定义为类“A”的成员函数,因为你的定义有“bool ** A :: ** compareEntry_sumPct_nonMega(Entry arg1,Entry arg2)”。删除A.cpp中的A ::并尝试编译。
将您的A.cpp更改为 -
//A.cpp
#include "A.h"
bool compareEntry_sumPct_nonMega(Entry arg1, Entry arg2)
{
bool b = arg1.sumOfNonMegaEntryPct(numbers) < arg2.sumOfNonMegaEntryPct(numbers);
return b;
}
答案 1 :(得分:1)
bool A::compareEntry_sumPct_nonMega(Entry arg1, Entry arg2)
类的友元函数不是其成员函数。
因此,A::
告诉编译器它应该将此函数视为成员函数,但它显然不是成员函数。
所以,取出A::
即范围解析。
函数既不能是类T
的成员函数,也不能是T
的友元函数。如果它已经是一个成员函数,那么,使它成为该类的朋友的重点是什么。
如果您打算将一个类函数用作另一个类的朋友,那么您可以按如下方式使用它:
class B
{
public:
void fB(A& a);
void fB2(A& a);
};
class A
{
public:
friend void B::fB(A& a);
void fA(){}
};
答案 2 :(得分:0)
//A.h
class A{
friend bool compareEntry_sumPct_nonMega(A& obj, Entry arg1, Entry arg2); <-- CHANGE done here
}
//A.cpp
#include "A.h"
bool compareEntry_sumPct_nonMega(A& obj, Entry arg1, Entry arg2) <-- CHANGE done here
{
// Using 'obj', all members (private as well) of class A can be accessed <-- CHANGE done here
bool b = arg1.sumOfNonMegaEntryPct(numbers) < arg2.sumOfNonMegaEntryPct(numbers);
return b;
}