2

文字列を期待している関数があり、constchar*を返される文字列に連結したいと思っていました。

このシナリオを説明するのに役立つサンプルコードを次に示します。

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

次のエラーが発生します:タイプ'constchar*'および'constchar*'の無効なオペランドから二項演算子+

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

4

2 に答える 2

6

char const*+エラーが示すように、演算子と一緒に使用することはできません。

あなたがする必要があるのはこれです:

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

タイプの一時オブジェクトを作成しstd::string、それを使用できます+。文字列を連結し、一時的なものを作成し、最後に最後の文字列をに渡しますpush_back

それとは別に、@ Konradがコメントで指摘しているように、メソッドにポインタを渡さないでください。代わりに、次のように参照を使用してください。

void TMain::SomeMethod(std::vector<std::string> & p) //<-- note & 
{
  p.push_back(std::string(TAnotherClass::Cchar1)+"/"+TAnotherClass::Cchar2);
}
于 2012-05-11T15:03:40.743 に答える
0

2つのポインタを追加しようとしているためです。+演算子はchar*でオーバーライドできません。

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

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

std::string(...)上記で使用されているのは、関数表記を使用したCスタイルのキャストであることに注意してください。この場合は、と同等static_cast<std::string>(...)です。

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

于 2012-05-11T15:04:07.973 に答える