Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;变量在多个文件中的作用域_C++_Scope - Fatal编程技术网

C++ C++;变量在多个文件中的作用域

C++ C++;变量在多个文件中的作用域,c++,scope,C++,Scope,如何使特定文件中的变量/函数可见? 例如,假设我有这样的文件层次结构: a、 h a、 cpp b、 h b、 cpp 在main.cpp中,我希望能够调用函数(),但不能访问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

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

a、 h

a、 cpp

b、 h

b、 cpp

在main.cpp中,我希望能够调用
函数()
,但不能访问
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。如何实现这一点

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

b、 h

b、 cpp


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

b、 h

b、 cpp


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

class A
{
private:
    int var;

public:
    void function()
    {
        var = 0;
    };
};

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

class A
{
private:
    int var;

public:
    void function()
    {
        var = 0;
    };
};

不要将
a.h
包含在
b.h
中,而是将其包含在
b.cpp
中不要将
a.h
包含在
b.h
中,而是将其包含在
b.cpp
中同意,隐藏声明的隐私保障比私人成员弱,尽管如果程序员真的想,两者都可能被欺骗。@lvella,绝对同意-但是你必须真正开始绕过一个类,而意外地包含错误的文件会带来一大堆伤害。特别是因为它们是全局性的,甚至没有名称空间来温暖地拥抱它们。同意,隐藏声明比私有成员的隐私保证更弱,尽管如果程序员真的想欺骗它们,两者都可能被欺骗。@lvella,绝对同意-但你必须真正开始绕过类,然而,意外地包含错误的文件会带来一大堆伤害。尤其是因为它们是全球性的,甚至没有名字空间来拥抱它们。
#include "b.h"

void function() {
    var = 0;
}
#include "b.h"

int main(int argc, char** argv) {
    function(); /* possible to call */
    var = 0 /* var shouldn't be visible */
} 
void function();
#include "b.h"
#include "a.h"

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

public:
    void function()
    {
        var = 0;
    };
};