2016-10-27 5 views
0

ハードウェアが取り付けられているArduinoボードのC++コードを書いています。コード内のさまざまな場所で、私はさまざまなハードウェアの値を持つ文字列を作成し、それをコマンドの一部としてシリアルに送信する必要があります。シリアル経由で送信された非常に特定のコマンドの一部である必要があるため、コマンド全体が準備できたら最初に構築して送信します。私はメインの文字列を宣言することによってこれを行うことが可能であった場合、私は思っていた参照渡し文字列/パスを返す

String dataString = constructDataString(); 

でそれを呼び出す私は

'String constructDataString() 
{ 
    // Set up data to transmit 
    String dataStr = String(var1);       
    dataStr += ","; 
    dataStr += String(var2); 
    dataStr += ","; 
    dataStr += String(var3);   
    dataStr += ","; 
    dataStr += String(var4);  
    dataStr += ","; 
    dataStr += String(var5);        

    return dataStr; 
}' 

以下の機能を経由して、それをやっている時点では

それを参照によって関数に渡し、関数が関数を直接変更できるようにします。私はこれをいくつかの方法で試しましたが、うまく動作するのに問題があります。私は以下のようなものを試しましたが、これに精通していない人はいなかったので、誰かが助けてくれることを期待していました。メイン

から

プロトタイプ

void constructDataString (String* extString) 

コール

String dataString =””; 
String* dataStringPtr = & dataString; 
constructDataString (dataStringPtr); 

機能

void constructDataString (String* extString) 
{ 
// Set up data to transmit 
    extString = String(var1);       
    extString += ","; 
    extString += String(var2);         
    extString += ","; 
    extString += String(var3);  
    extString += ","; 
    extString += String(var4); 
    extString += ","; 
    extString += String(var5); 
} 

答えて

2

することができます、確かに。しかし、constructDataStringの本文では、extStringの代わりに*extStringを使用してポインタの参照を解除する必要があります。 それ以外の場合は、C++で参照を使用できます。

参照すると、コードは次のようになります。

void constructDataString (String& extString) 
{ 
// Set up data to transmit 
    extString = String(var1);       
    extString += ","; 
    extString += String(var2);         
    extString += ","; 
    extString += String(var3);  
    extString += ","; 
    extString += String(var4); 
    extString += ","; 
    extString += String(var5); 
} 

と次のようにあなたはそれを使用します。

String dataString =””; 
constructDataString (dataString); 
+0

こんにちはCantfindname、それを修正したこと、どうもありがとうございました。私は最近、非C++コードをたくさん書いているので、その部分を完全に忘れてしまった。また、nullパラメータの場合には参照を避けるのが一般的です。スタックに文字列を渡していないように、それを2番目の方法で行う方が効率的かどうか、私は知っていますか? – user1649972

+0

ありがとう、ちょうどここに入力ミス:D – user1649972

+1

私の知る限り、参考文献はほとんどがC++の構文糖であるため、コンパイルした後、両方の方法がまったく同じになり、スタック内にポインタを押すだけです – Cantfindname

関連する問題