2012-05-11 7 views
2

文字列が必要な関数があります。返される文字列にconst char *を連結したいと思っていました。ここで文字列にchar *を連結します

は、このシナリオを説明するのに役立つサンプルコードです:

void TMain::SomeMethod(std::vector<std::string>* p) 
{ 
    p->push_back(TAnotherClass::Cchar1 + "/" + TAnotherClass::Cchar2); 
} 

、ここでは他のクラスであるこれらから、次のとおりです。次のエラーを取得

class TAnotherClass 
{ 
public: 
    static const char * Cchar1; 
    static const char * Cchar2; 
}; 

const char * TAnotherClass::Cchar1 = "Home"; 
const char * TAnotherClass::Cchar2 = "user"; 

イム:タイプの 無効オペランド " const char * 'と' const char * 'をバイナリ演算子に+

これはなぜ無効ですか?助けてください

+1

そして、言われたことに加えて、ポインタをメソッドに渡さないで、代わりに参照を使用してください! –

答えて

6

char const*は、便宜のために+オペレータと一緒に使用することはできません。あなたがする必要がどのような

はこれです:

p->push_back(std::string(TAnotherClass::Cchar1) + "/" + TAnotherClass::Cchar2); 
      //^^^^^^^^^^^^ notice this 

それは、あなたがそれを+を使用することができ、タイプstd::stringの一時オブジェクトを作成します。文字列を連結し、すべての方法で一時的に作成し、最後に最後の文字列をpush_backに渡します。あなたは2を追加しようとしているので

void TMain::SomeMethod(std::vector<std::string> & p) //<-- note & 
{ 
    p.push_back(std::string(TAnotherClass::Cchar1)+"/"+TAnotherClass::Cchar2); 
} 
+2

より具体的には、2つの 'const char * 'を使って過負荷はありません。 – chris

+0

おかげで、私はできるだけstd :: conversionas mushを避けようとしていましたが、それが唯一の方法ならば:) – user1381456

0

:@Konradコメントで述べたように

それとは別に、はとして、代わりにを参照を使用し、メソッドにポインタを渡すことはありません。ポインタ。 +演算子はchar *に対してオーバーライドできません。

あなたはこれを行うことができます。

p->push_back(std::string(TAnotherClass::Cchar1) + "/" + TAnotherClass::Cchar2); 

は心の中でstd::string(...)関数表記を使用してCスタイルのキャストを上記で使用されているという事実を保管してください。この場合はstatic_cast<std::string>(...)に相当します。

コードでファンクションスタイルのキャストを許可するかどうかは、あなた次第です。一部のポリシーはすべてのCスタイルのキャストに反対しています。私の以前の職場では、この特定の使用は許可されていましたが、他は使用できませんでした。

+0

それを指摘してくれてありがとう – user1381456