文字列を丸めることができないのはなぜですか?


143

なぜ私はこれがcout string好きではないのですか?

string text ;
text = WordList[i].substr(0,20) ;
cout << "String is  : " << text << endl ;

これを行うと、次のエラーが発生します。

エラー2エラーC2679:バイナリ '<<':タイプ 'std :: string'の右側のオペランドをとる演算子が見つかりません(または許容できる変換がありません)c:\ users \ mollasadra \ documents \ visual studio 2008 \ projects \ barnamec \ barnamec \ barnamec.cpp 67 barnamec **

これでも機能しないのは驚くべきことです。

string text ;
text = "hello"  ;
cout << "String is  : " << text << endl ;

エラーメッセージを編集できますか?
Troyen

1
しましたか#include <iostream>
Konerak

十分な情報がありません。エラーは何
ですか

私はそれをやった。しかし、再び、私は問題を抱えています。
Ata

ファイル全体を投稿できますか?これを関数で呼び出すのか、適切なものを含めているのかなどはわかりません
Konerak

回答:


241

あなたが含める必要があります

#include <string>
#include <iostream>

7
また、using namespace stdまたはusing std::cout; using std::endl;
fardjad

2
はい、しかしそれは含まれていると思いstring text;ます。編集(追加されたエラー)にもエラーがないため、これは問題ではなくstringヘッダーが欠落しているということです。
キリルキーロフ

57
+1:Visual C ++の多くのSTLヘッダー(<iostream>を含む)は、std::basic_stringクラスの定義を取り込みます(実装定義の<xstring>ヘッダーを間接的にインクルードするためです(直接インクルードしないでください))。これにより文字列クラスを使用できますが、関連operator<<は<string>ヘッダー自体で定義されているため、手動で含める必要があります。またstd::basic_string、VC ++ での動作の定義を間接的に含めるために他のヘッダーに依存していますが、すべてのコンパイラで動作するわけではありません。
Sven

6
Sven-あなたのコメントは素晴らしいです!私はこの質問者と同様の問題があり、コンパイラーは演算子>>がstd :: cinおよびstd :: string型に対して定義されていないと述べました。私は<iostream>を持っていましたが、<string>を忘れていました。std :: stringが定義されていないと不満を言うgcc付きのLinuxでの作業に慣れています。あなたのコメントは、なぜ私たちがオペレーターについての苦情を受けたのかを完全に説明しています。ありがとう!!
Daniel Goldfarb 2013年

2
これは機能します。コードに#include <string>行がありませんでした。ありがとう。
Hao Nguyen

11

stdなんとかしてcoutの名前空間を参照する必要があります。たとえば、挿入

using std::cout;
using std::endl;

関数定義またはファイルの上に。


6

コードにはいくつかの問題があります:

  1. WordListどこにも定義されていません。使用する前に定義する必要があります。
  2. このような関数の外でコードを書くことはできません。関数に入れる必要があります。
  3. または#include <string>を使用する前に、文字列クラスとiostreamを使用できるようにする必要があります。coutendl
  4. stringcoutendlでのライブstd、あなたがそれらを接頭辞なしでそれらにアクセスすることはできませんので、名前空間std::は、使用しない限り、using最初のスコープにそれらをもたらすにディレクティブを。

それらのどれも私のために働いていません、問題はsubstrにあるようです
Ata

1

上記の答えは良いですが、文字列インクルードを追加したくない場合は、以下を使用できます

ostream& operator<<(ostream& os, string& msg)
{
os<<msg.c_str();

return os;
}

0

c_str()を使用して、std :: stringをconst char *に変換します。

cout << "String is  : " << text.c_str() << endl ;

-1

std::coutまたはstd::endl明示的に参照する必要はありません。
どちらもに含まれていnamespace stdます。毎回using namespace stdスコープ解決演算子を使用する代わりに、::より簡単でクリーンになります。

#include<iostream>
#include<string>
using namespace std;

5
StackOverflowへようこそ。気づかなかったかもしれませんが、これは受け入れられた回答のコメントの1つで対処されました。
Andon M. Coleman

-3

Linuxシステムを使用している場合は、追加する必要があります

using namespace std;

ヘッダーの下

ウィンドウの場合は、ヘッダーを正しく配置してください #include<iostream.h>

#include<string.h>

これを参照してください、完全に機能します。

#include <iostream>
#include <string>

int main ()
{
std::string str="We think in generalities, but we live in details.";
                                       // (quoting Alfred N. Whitehead)

  std::string str2 = str.substr (3,5);     // "think"

   std::size_t pos = str.find("live");      // position of "live" in str

  std::string str3 = str.substr (pos);     
// get from "live" to the end

  std::cout << str2 << ' ' << str3 << '\n';

  return 0;
}

using namespace std;ターゲットosの存在とは関係ありませんlinux。同様に、追加.h含んには、ターゲットのOSがWindowsであることとは何の関係もない、#include <iostream>#include <string>Windows上で動作します。
StaticBeagle 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.