我认为我可以这样做:
class TestA
{
private:
class Nested
{
};
};
class TestB
{
public:
friend class TestA;
friend class TestA::Nested;
};
但是我得到一个错误:
错误C2248'TestA :: Nested':无法访问在类中声明的私有类
有没有办法与私人嵌套课程成为朋友?我该怎么办?
当尝试在MSVC 2017(C ++ 17)中编译MSVC 6项目时遇到此错误。我想那回可以。
答案 0 :(得分:15)
通过相同的方式,您可以访问任何其他私人物品。您还需要友谊:
Tags:
- Key: Application
Value: !Ref 'AWS::StackId'
- Key: Name
Value: MNPMGMT-SPMASTER
NetworkInterfaces:
- NetworkInterfaceId: !GetAtt 'MgmtNetworkingStack.Outputs.niSplunkMstrIp'
DeviceIndex: '0'
BlockDeviceMappings:
- DeviceName: /dev/sdb
Ebs:
Encrypted: 'true'
VolumeSize: '250'
UserData:
Fn::Base64: |
#!/bin/bash
EC2_INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
EC2_REGION=${EC2_AVAIL_ZONE:0:${#EC2_AVAIL_ZONE} - 1}
ROOT_DISK_ID=$(aws ec2 describe-volumes --filters Name=attachment.instance-id,Values={EC2_INSTANCE_ID} Name=attachment.device,Values=/dev/sda1 --query 'Volumes[*].[VolumeId]' --region=${EC2_REGION} --out \"text\" | cut -f 1)
aws ec2 create-tags --resources $ROOT_DISK_ID --tags Key=Name,Value=\"Root Volume my-instance\" --region ${EC2_REGION}
答案 1 :(得分:8)
这可以做到:
File.ReadAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "pippo.xml"));
说明:class TestA {
friend class TestB;
private:
class Nested {};
};
class TestB {
public:
friend class TestA::Nested;
};
本身有责任将其内部结构提供给他人。想象任何TestA
都可以侵入性地使用友谊来访问其他类的内部结构(从库等),这将为任意破坏封装打开大门。
答案 2 :(得分:4)
您尝试在private
中使用TestA
的{{1}}嵌套类,然后应将TestB
声明为 TestB
< / em>在friend
中。例如
TestA
答案 3 :(得分:0)
只需注释掉friend class TestA::Nested;
行,如下所示:
class TestA
{
private:
class Nested
{
};
};
class TestB
{
public:
friend class TestA;
// friend class TestA::Nested;
};
由于TestA::Nested
的范围与TestA
相似,因此TestA::Nested
的方法可以访问TestB的私有/受保护成员。