首页 > 解决方案 > 为什么我可以访问类外的私有结构成员

问题描述

当我访问这个私有结构成员时,msvc 编译器告诉我无法访问该成员,但可以成功运行代码。

但是如果我将结构成员排除在外,则代码将无法运行

#include <iostream>
class A{
    union{
         struct{
            char* c;
         };
    };
};

void fun(A* tmp) {
    //like this,note me can't access,but have no error
    tmp->c = new char('a');
}

int main(void) {

    A t;
    fun(&t);
    std::cout << t.c;
    return 0;
}

//can't run,me can't access and have a "can't access" error
class A{
....
private:
    union{

    };
    struct{
        char* c; 
    };
....
};

txt 输出

1>------ Build started: Project: c++11test, Configuration: Debug x64 ----- 
-
1>  main.cpp
1>d:\wirbelwind\documents\visual studio 
2015\projects\json\c++11test\main.cpp(52): warning C4091: 'static ': ignored 
on left of 'a' when no variable is declared
1>  c++11test.vcxproj -> D:\Wirbelwind\Documents\Visual Studio 
2015\Projects\json\x64\Debug\c++11test.exe
1>  c++11test.vcxproj -> D:\Wirbelwind\Documents\Visual Studio 
2015\Projects\json\x64\Debug\c++11test.pdb (Full PDB)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

我编辑了代码,这段代码可以做测试。我使用vs2015(工具v140)

标签: c++classunionsprivate-membersanonymous-struct

解决方案


推荐阅读