2 개의 클래스 (firstClass와 secondClass)가 있는데, firstClass는 secondClass의 친구이고, private nested unordered_map을 가지고 있습니다. 따라서 기본적으로 코드는 다음과 같습니다.
class secondClass;
typedef unordered_map STable<unsigned, unordered_map<unsigned, double> > NESTED_MAP;
class firstClass{
friend class secondClass;
void myfunc1(secondClass* sc){
sc->myfunc2(&STable);
}
private:
NESTED_MAP STable;
};
class secondClass{
public:
void myfunc2(NESTED_MAP* st){
//Here I want to insert some elements in STable.
//Something like:
st[1][2]=0.5;
}
};
int main(){
firstClass fco;
secondClass sco;
fco.myfunc1(&sco);
return 0;
}
사소해야한다는 것을 알고 있지만 어떻게 해결해야할지 모르겠습니다. 어떤 생각? (더 명확하게하기 위해 코드와 질문을 변경했습니다)
friend 클래스는 모든 private 멤버에 액세스 할 수 있으므로 public이었던 것처럼 메서드를 호출하고 속성을 수정할 수 있습니다.
여기 에 문서가 나와 있습니다.
friend 선언은 클래스 본문에 나타나며 friend 선언이 나타나는 클래스의 private 및 protected 멤버에 대한 함수 또는 다른 클래스 액세스 권한을 부여합니다.
즉, 귀하의 예 를 보면 myfunc2 가 공개 되어서는 안되는 것처럼 보이기 때문에 friend 키워드 를 넣을 위치를 변경하고 싶습니다 .
위의 제안을 적용하고 친구 클래스의 개인 멤버 를 처리하는 방법을 보여주는 예제를 따릅니다 .
#include<unordered_map>
using namespace std;
class firstClass;
class secondClass{
friend class firstClass;
private:
void myfunc2(unordered_map<unsigned,double>& map){
map[1]=0.5;
}
};
class firstClass{
public:
void myfunc1(secondClass* sc){
// here firstClass is accessing a private member
// of secondClass, for it's allowed to do that
// being a friend
sc->myfunc2(STable);
}
private:
unordered_map<unsigned,double> STable;
};
int main(){
firstClass fco;
secondClass sco;
fco.myfunc1(&sco);
return 0;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다