🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

5566閲覧

C++:左オペランドを扱う演算子が見つかりません。

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2019/09/24 07:20

C++をVisual Studio2017で開発しています。

以下のprintf部分でエラーが出ています。私の認識が正しければ、「CString型とconst char[]の異なる型を持つ変数を「+」演算子で足すことはできない」、という内容であると思っています。マルチバイト文字コードでのビルドを行った際は、下記コードでもエラーは検出されませんでしたが、Unicodeビルドを行った際、以下のエラーが出るようになりました。Unicodeでビルドするようになってからエラーが検出された原因と、具体的なエラーの解消方法を知りたいです(MSDNは参照しましたが、本ケースでの具体的な対処方法が分かっていません)

C2678: 二項演算子 '+': 型 'const char [5]' の左オペランドを扱う演算子が見つかりません (または変換できません)

CString strName; strName = "test"; printf("サーバ名'" + strName + "'は既に存在します。\n");

以上、宜しくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Unicodeビルドを行った際、以下のエラーが出るようになりました。

CStringと文字列の連結演算子は、文字列のほうがPCXSTRを取るようになっています。

これは、「CStringがベースとしている文字型へのポインタ」として定義されていますので、ANSIではchar *なのに対して、Unicodeビルドではwchar_t *となります。普通に書いた文字列はchar[]ですので、Unicodeビルドでは型が合わなくなってしまいます。

文字列を両対応させたい場合、_T("サーバ名'")のようにすれば、ANSIではcharベースの文字列、Unicodeではwchar_tベースの文字列となります。

投稿2019/09/24 07:31

maisumakun

総合スコア145975

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/24 07:48

ご指摘を参考に、以下のように修正を行ったところ、再度別のエラーが検出されました。 同様に_TをLに置き換えた場合も試してみましたが、同様のエラーが出ています。 マクロなどを入れても、正常に型変換が行えていないということですかね。 printf(_T("データ転送コネクタ'") + strDevName + _T("'は既に存在します。\n" ); ■エラー文面 "ATL::CStringT<wchar_t, StrTraitMFC_DLL<wchar_t, ATL::ChTraitsCRT<wchar_t>>>" から "const char *" への適切な変換関数が存在しません
maisumakun

2019/09/24 07:50

printf自体がANSI専用です。_tprintfを使ってください。
KoichiSugiyama

2019/09/24 08:16

横から補足ですが、Visual StudioでC++を使われるのであれば、汎用テキストルーチンについては大抵maisumakunさんがご指摘されているように、_tから始まるTCHAR用のルーチンが用意されています。面倒ですが、慣れると何となく推測できるので、インテリセンスで探すこともできますので、一度リファレンスで汎用テキストルーチンについて調べてみることをお勧めします。
退会済みユーザー

退会済みユーザー

2019/09/24 08:23

maisumakun様 ありがとうございます。エラー解消できました。
退会済みユーザー

退会済みユーザー

2019/09/24 08:24

KoichiSugiyama様 エラー解消できました。「汎用テキストルーチン」に関しても、目を通させて頂きます。アドバイスありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問