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";
}

文字列をポインタとして渡し、function2で逆参照することもできます。これは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 に答える