17

谁能告诉我如何访问在另一个函数中的函数中声明和定义的变量。例如

void function1()
{
   string abc;
}

void function2()
{
   I want to access abc here.
}

怎么做?我知道使用参数我们可以做到这一点,但还有其他方法吗?

4

4 回答 4

18

C++ 方法是abc通过引用传递给您的函数:

void function1()
{
    std::string abc;
    function2(abc);
}
void function2(std::string &passed)
{
    passed = "new string";
}

您也可以将您的字符串作为指针传递并在函数 2 中取消引用它。这更像是 C 风格的做事方式,并不安全(例如,可以传入 NULL 指针,如果没有良好的错误检查,它将导致未定义的行为或崩溃。

void function1()
{
    std::string abc;
    function2(&abc);
}
void function2(std::string *passed)
{
    *passed = "new string";
}
于 2012-08-02T18:21:31.123 回答
11

使其成为全球性的,然后双方都可以操纵它。

string abc;

void function1(){
    abc = "blah";
} 

void function2(){
    abc = "hello";
} 
于 2012-08-02T18:24:54.557 回答
7

如果您想在 function2 中使用 function1 中的变量,那么您必须:

  1. 直接通过,
  2. 有一个更高范围的函数,它调用声明变量并传递它,或者
  3. 将其声明为全局,然后所有函数都可以访问它

如果你的function2是从function1调用的,那么你可以将它作为参数传递给function2。

void function1()  
{  
    std::string abc;  
    function2( abc );  
}  

void function2( std::string &passed )   
{   
    // function1::abc is now aliased as passed and available for general usage.
   cout << passed << " is from function1.";   
}   

如果 function1 没有调用 function2,但两者都被 function3 调用,则让 function3 声明变量并将其作为参数传递给 function1 和 function2。

void parentFunction( )
{
    std::string abc;  
    function1( abc );  
    function2( abc );  
}
void function1( std::string &passed )   
{   
   // Parent function's variable abc is now aliased as passed and available for general usage.
   cout << passed << " is from parent function.";   
}   
void function2( std::string &passed )   
{   
    // Parent function's variable abc is now aliased as passed and available for general usage.
   cout << passed << " is from parent function.";   
}    

最后,如果 function1 和 function2 都没有被相互调用,也没有被代码中的同一个函数调用,那么声明该变量为全局共享,function1 和 function2 就可以直接使用它。

std::string global_abc;  
void function1( )   
{   
   cout << global_abc << " is available everywhere.";   
}   
void function2( )   
{   
   cout << global_abc << " is available everywhere.";   
}    
于 2012-08-02T18:35:00.587 回答
2

绝对没有办法。块的变量只能从该块直接访问。

指向对象的指针/引用可以作为参数传递到从此块调用的函数中。

于 2012-08-02T18:20:12.547 回答