【发布时间】:2015-06-12 17:25:42
【问题描述】:
Friend 函数无法访问声明它的类的私有成员
我正在尝试重新创建一个示例程序,我在一本演示朋友功能使用的书中阅读。我在使用 Visual Studio 时遇到了一个令人讨厌的“Intellisense”错误,坦率地说,我无法忍受,说我定义的朋友函数无法访问存在朋友函数声明的私有成员。不同文件中的代码如下:
Main.cpp:
#include "stdafx.h"
#include <iostream>
#include "Budget.h"
using namespace std;
int main() {
return 0;
}
预算.h
#pragma once
#include "Auxi.h"
class Budget {
public:
Budget() {
divisionBudget = 0;
}
double getDivisionBudget() const {
return divisionBudget;
}
void addBudget(int n) {
divisionBudget += n;
corporateBudget += n;
}
double getCorporateBudget() {
return corporateBudget;
}
static void setCorporateBudget(double n) {
corporateBudget = n;
}
friend void AuxillaryOffice::addBudget(double, Budget &);
private:
static double corporateBudget;
double divisionBudget;
};
double Budget::corporateBudget = 0;
辅助.h
#pragma once
class Budget;
class AuxillaryOffice {
public:
AuxillaryOffice() {
divisionBudget = 0;
}
void addBudget(double n, Budget &b);
private:
double divisionBudget;
};
辅助.cpp
#include "stdafx.h"
#include "Auxi.h"
#include "Budget.h"
// class Budget; Do I need this here?
void AuxillaryOffice::addBudget(double n, Budget &b) {
divisionBudget += n;
b.corporateBudget += n; // THIS IS THE ERROR LINE
}
在上面的Auxi.cpp 文件中,我在b.corporateBudget += n; 行收到一个错误,它说corporateBudget 无法访问。这是所有合法的 C++ 代码还是我在这个例子中遗漏了什么?
谢谢。
【问题讨论】:
-
你真的得到了编译错误还是只是 IntelliSense 抱怨?
-
您可以将两个类声明为好友。我认为在你的情况下它更合适。
-
@Brian 这是一个编译器错误,抱怨一些它不知道的奇怪的不存在的符号(不存在)以及我想尝试的智能感知,一个不属于的函数到一个班级朋友的班级,看看这是否可行。
标签: c++ class oop private friend