【问题标题】:C++ variables scope in multiple files多个文件中的 C++ 变量范围
【发布时间】:2012-07-26 15:51:24
【问题描述】:

如何使特定文件中的变量/函数可见? 例如,假设我有这样的文件层次结构:

啊。

extern int var;

a.cpp

#include "a.h"

int var;

b.h

#include "a.h"

void function();

b.cpp

#include "b.h"

void function() {
    var = 0;
}

在 main.cpp 中我希望能够调用 function(),但不能访问 var 变量

#include "b.h"

int main(int argc, char** argv) {
    function(); /* possible to call */
    var = 0 /* var shouldn't be visible */
} 

我不希望文件 a.h 包含在 main.cpp 中 - 只有 b.h。我怎样才能做到这一点?

【问题讨论】:

  • 不要在b.h 中包含a.h,但在b.cpp 中包含它

标签: c++ scope


【解决方案1】:

a.h 不需要包含在 b.h 中,只需要包含在 b.cpp 中。这是因为 var 只需要函数定义,而不是它的声明。除非您绝对必须这样做,否则不要在其他标题中包含标题。

b.h

void function();

b.cpp

#include "b.h"
#include "a.h"

void function() {
    var = 0;
}

【讨论】:

    【解决方案2】:

    我认为您需要停止尝试使用文件的可见性来隐藏信息,并开始研究 C++ 类,这些类允许您“隐藏”“方法”通过私有成员使用的东西:

    class A
    {
    private:
        int var;
    
    public:
        void function()
        {
            var = 0;
        };
    };
    

    【讨论】:

    • 同意,隐藏声明比私有成员的隐私保证更弱,尽管如果程序员真的愿意,两者都可以被欺骗。
    • @lvella,绝对同意——但你必须真正开始规避课程,而不小心包含错误的文件会带来一大堆伤害。特别是因为它们是全局变量,甚至没有命名空间来用温暖的火来拥抱它们​​。
    猜你喜欢
    • 1970-01-01
    • 2011-03-16
    • 2021-11-14
    • 2011-12-23
    • 1970-01-01
    • 2020-04-03
    • 2011-05-26
    • 2017-10-30
    • 1970-01-01
    相关资源
    最近更新 更多