C++ Friend 函数位于单独的头文件和.cpp文件中
C++ Friend Functions in separate header and .cpp files
//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 的成员。
bool A::compareEntry_sumPct_nonMega(Entry arg1, Entry arg2)
类的友元函数不是其成员函数。因此,A::
告诉编译器它应该将此函数视为成员函数,但它显然不是成员函数。
因此,取出A::
IE范围分辨率。
函数不能既是类T
的成员函数,又是T
的友元函数。如果它已经是一个成员函数,那么,让它成为该类的朋友有什么意义。
如果您打算将一个类函数用作另一个类的朋友,那么您可以按如下方式使用它:
class B
{
public:
void fB(A& a);
void fB2(A& a);
};
class A
{
public:
friend void B::fB(A& a);
void fA(){}
};
//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;
}
由于您已将"friend bool compareEntry_sumPct_nonMega(Entry arg1, Entry arg2(;"定义为 friend 函数,因此您告诉编译器函数 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;
}
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 为什么我的主文件.cpp不打印头文件中的任何内容
- 生成文件错误 - 找不到文件 - *.cpp
- 如何在文件.cpp gtkmm中声明小部件
- 没有实现文件(.cpp)的派生类
- 如何使用"CMakeLists.txt"中的add_library将整个文件(.cpp,.h等)包含在目录中
- 如何在Linux / Windows操作系统上使用文件*.cpp一步编译下面的代码
- 关于 Linux .so 文件无法链接到主文件.cpp文件
- 文件.cpp从Windows到Linux
- Ubuntu C++ 编译器错误: g++: 错误: 文件.cpp: 没有这样的文件或目录
- 如何将文件.cpp编译为本机编译
- 使用模板类时,似乎无法包含除 main 以外的任何 cpp 文件.cpp
- 无法编译C++文件.cpp。C++98模式
- 为什么C++头文件不需要包含实现文件 (.cpp)
- 如何访问位于独立文件(.cpp)中的非成员函数
- 如何在Visual Studio Code中通过键盘快捷键切换头文件/cpp文件
- 如何将数据从stringstream写入文件(CPP)
- 为什么filestream不把空白写入文件cpp ?