मैं एक स्ट्रिंग क्यों नहीं कर सकता?


143

मुझे यह cout stringपसंद क्यों नहीं है:

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

जब मैं ऐसा करता हूं, मुझे निम्न त्रुटि मिलती है:

त्रुटि 2 त्रुटि C2679: बाइनरी '<<': कोई ऑपरेटर नहीं मिला, जो 'std :: string' (या कोई स्वीकार्य रूपांतरण नहीं है) के दाएं हाथ का ऑपरेंड लेता है: c: \ users \ mollasadra \ दस्तावेज \ Visual Studio 2008 \ प्रोजेक्ट्स \ barnamec \ barnamec \ barnamec.cpp 67 barnamec **

यह आश्चर्यजनक है, कि यह भी काम नहीं कर रहा है:

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

क्या आप त्रुटि संदेश में संपादित कर सकते हैं?
ट्रॉयन

1
क्या आपने #include <iostream>?
कोनरक

पर्याप्त जानकारी नहीं है। त्रुटि क्या है
एलेक्स

मैंने ऐसा किया है। लेकिन फिर, मुझे समस्या है।
अता

क्या आप पूरी फाइल पोस्ट कर सकते हैं? हम नहीं जानते कि क्या आप इसे एक समारोह में बुला रहे हैं, अगर आपने सही चीजों को शामिल किया है, आदि ...
कोनरक

जवाबों:


241

आपको शामिल करने की आवश्यकता है

#include <string>
#include <iostream>

7
और भी using namespace stdया using std::cout; using std::endl;
फर्दजाद

2
हां, लेकिन मुझे लगता है कि यह शामिल है, क्योंकि इसमें कोई त्रुटि string text;भी नहीं है (संपादित त्रुटि) कहते हैं, कि यह समस्या नहीं है, लेकिन लापता stringहेडर है।
किरिल किरोव

57
+1: विज़ुअल सी ++ (<iostream> सहित) में कई एसटीएल हेडर std::basic_stringकक्षा की एक परिभाषा में खींचते हैं (क्योंकि वे अप्रत्यक्ष रूप से कार्यान्वयन-परिभाषित <xstring> हेडर को शामिल करते हैं ( कभी सीधे इसमें शामिल नहीं होते हैं )। जबकि यह आपको स्ट्रिंग क्लास का उपयोग करने की अनुमति देता है, प्रासंगिक operator<<को <string> हेडर में ही परिभाषित किया गया है, इसलिए आपको इसे मैन्युअल रूप से शामिल करना होगा। अन्य हेडर पर भी अप्रत्यक्ष रूप std::basic_stringसे वीसी ++ में काम करने की परिभाषा शामिल है , लेकिन यह सभी कंपाइलरों पर काम नहीं करेगा।
स्वेन

6
स्वेन- आपकी टिप्पणी कमाल की है! मुझे इस प्रश्नकर्ता के रूप में एक समान समस्या थी, संकलक ने कहा कि ऑपरेटर >> प्रकार के लिए परिभाषित नहीं था std :: cin और std :: string। यह पता चला है कि मेरे पास <iostream> था लेकिन भूलने में <string> था। मुझे linux w / gcc पर काम करने की आदत है, जिसने शिकायत की होगी कि std :: string को परिभाषित नहीं किया गया है। आपकी टिप्पणी पूरी तरह से बताती है कि हमें ऑपरेटर के बारे में शिकायत क्यों मिली। धन्यवाद!!
डैनियल गोल्डफर्ब

2
यह काम। मैंने अपने कोड में #include <string> लाइन को याद किया। धन्यवाद।
हाओ गुयेन

11

आपको stdकिसी भी तरह कॉट के नामस्थान का संदर्भ देने की आवश्यकता है । उदाहरण के लिए, सम्मिलित करें

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

आपकी फ़ंक्शन परिभाषा, या फ़ाइल के शीर्ष पर।


6

आपके कोड में कई समस्याएं हैं:

  1. WordListकहीं भी परिभाषित नहीं है। इसका उपयोग करने से पहले आपको इसे परिभाषित करना चाहिए।
  2. आप इस तरह से एक फ़ंक्शन के बाहर कोड नहीं लिख सकते। आपको इसे किसी फ़ंक्शन में रखने की आवश्यकता है।
  3. आपको #include <string>उपयोग करने से पहले स्ट्रिंग क्लास और आईस्ट्रीम का उपयोग करने से पहले coutया करने की आवश्यकता हैendl
  4. string, coutऔर नामस्थान endlमें रहते हैं std, इसलिए std::जब तक आप usingउन्हें पहले दायरे में लाने के निर्देश का उपयोग नहीं करते हैं, तब तक आप उन्हें उपसर्ग किए बिना उन्हें एक्सेस नहीं कर सकते ।

उनमें से किसी ने मेरे लिए काम नहीं किया, ऐसा लगता है कि समस्या जड़ के साथ है
अता

1

उपरोक्त उत्तर अच्छे हैं लेकिन यदि आप स्ट्रिंग को शामिल नहीं करना चाहते हैं, तो आप निम्नलिखित का उपयोग कर सकते हैं

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

return os;
}

0

St_ :: string को const char * में बदलने के लिए c_str () का उपयोग करें।

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

-1

आपको संदर्भ std::coutया std::endlस्पष्ट रूप से बताने की आवश्यकता नहीं है ।
वे दोनों में शामिल हैं namespace stdusing namespace stdगुंजाइश रिज़ॉल्यूशन ऑपरेटर का उपयोग करने के बजाय ::हर बार आसान और क्लीनर है।

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

5
StackOverflow में आपका स्वागत है, आपने गौर नहीं किया होगा, लेकिन स्वीकृत उत्तर की टिप्पणियों में से एक में इसे संबोधित किया गया था।
एंडन एम। कोलमैन

-3

यदि आप लिनक्स सिस्टम का उपयोग कर रहे हैं तो आपको जोड़ने की आवश्यकता है

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;लक्ष्य ओएस होने के साथ कुछ नहीं करना है linux। इसी तरह, इसमें .hशामिल करने से लक्ष्य ओएस के विंडोज़ होने से कोई लेना-देना नहीं है, #include <iostream>और #include <string>यह विंडोज़ पर काम करेगा।
स्टैटिकबाईगल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.