Tại sao tôi không thể cout một chuỗi?


143

Tại sao tôi không thể cout stringthích điều này:

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

Khi tôi làm điều này, tôi nhận được lỗi sau:

Lỗi 2 lỗi C2679: nhị phân '<<': không tìm thấy toán tử nào có toán hạng bên phải loại 'std :: string' (hoặc không có chuyển đổi chấp nhận được) c: \ users \ mollasadra \ Documents \ visual studio 2008 \ dự án \ barnamec \ barnamec \ barnamec.cpp 67 barnamec **

Thật đáng kinh ngạc, thậm chí điều này không hoạt động:

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

Bạn có thể chỉnh sửa trong thông báo lỗi?
Troyen

1
Có phải bạn #include <iostream>không
Konerak

không đủ thông tin. lỗi là gì
alexD

Tôi đã làm điều đó. nhưng một lần nữa, tôi có vấn đề
Ata

Bạn có thể gửi toàn bộ tập tin? Chúng tôi không biết liệu bạn có gọi chức năng này không, nếu bạn bao gồm những thứ phù hợp, v.v ...
Konerak

Câu trả lời:


241

Bạn cần bao gồm

#include <string>
#include <iostream>

7
và cũng using namespace stdhoặc using std::cout; using std::endl;
fardjad

2
Có, nhưng tôi đoán nó bao gồm, vì không có lỗi về string text;chỉnh sửa (lỗi thêm) nói rằng đây không phải là vấn đề mà là stringtiêu đề bị thiếu .
Kiril Kirov

57
+1: Nhiều tiêu đề STL trong Visual C ++ (bao gồm <iostream>) kéo theo định nghĩa của std::basic_stringlớp (vì chúng gián tiếp bao gồm tiêu đề <x chuỗi> được xác định thực hiện ( không bao giờ bao gồm trực tiếp điều đó )). Mặc dù điều đó cho phép bạn sử dụng lớp chuỗi, nhưng liên quan operator<<được xác định trong chính tiêu đề <chuỗi>, do đó bạn phải bao gồm điều đó theo cách thủ công. Cũng dựa vào các tiêu đề khác để gián tiếp đưa vào định nghĩa về các std::basic_stringtác phẩm trong VC ++, nhưng nó sẽ không hoạt động trên tất cả các trình biên dịch.
Sven

6
Sven- Nhận xét của bạn là tuyệt vời! Tôi gặp vấn đề tương tự như người hỏi này, trình biên dịch cho biết toán tử >> không được xác định cho các loại std :: cin và std :: string. Hóa ra tôi đã có <iostream> nhưng đã quên <chuỗi>. Tôi đã từng làm việc trên linux w / gcc, điều này sẽ phàn nàn rằng std :: string không được xác định. Nhận xét của bạn giải thích hoàn hảo tại sao chúng tôi thay vào đó nhận được khiếu nại về nhà điều hành. Cảm ơn!!
Daniel Goldfarb

2
Những công việc này. Tôi đã bỏ lỡ dòng #include <string> trong mã của mình. Cảm ơn.
Hao Nguyen

11

Bạn cần tham khảo không gian tên của cout stdbằng cách nào đó. Ví dụ, chèn

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

trên đầu định nghĩa chức năng của bạn, hoặc tập tin.


6

Có một số vấn đề với mã của bạn:

  1. WordListkhông được định nghĩa ở bất cứ đâu. Bạn nên xác định nó trước khi bạn sử dụng nó.
  2. Bạn không thể chỉ viết mã bên ngoài một chức năng như thế này. Bạn cần đặt nó trong một chức năng.
  3. Bạn cần phải #include <string>trước khi bạn có thể sử dụng lớp chuỗi và iostream trước khi bạn sử dụng couthoặc endl.
  4. string, coutendlsống trong stdkhông gian tên, vì vậy bạn không thể truy cập chúng mà không cần tiền tố họ với std::trừ khi bạn sử dụng các usingchỉ thị để đưa chúng vào phạm vi đầu tiên.

không ai trong số họ làm việc cho tôi, có vẻ như đó là vấn đề với chất nền
Ata

1

Câu trả lời trên là tốt nhưng nếu bạn không muốn thêm chuỗi bao gồm, bạn có thể sử dụng như sau

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

return os;
}

0

Sử dụng c_str () để chuyển đổi chuỗi std :: thành const char *.

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

-1

Bạn không cần phải tham khảo std::couthoặc std::endlrõ ràng.
Cả hai đều được bao gồm trong namespace std. using namespace stdthay vì sử dụng toán tử phân giải phạm vi ::mỗi lần thực hiện sẽ dễ dàng và sạch sẽ hơn.

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

5
Chào mừng bạn đến với StackOverflow, bạn có thể không nhận thấy nhưng điều này đã được giải quyết trong một trong những ý kiến ​​của câu trả lời được chấp nhận.
Andon M. Coleman

-3

Nếu bạn đang sử dụng hệ thống linux thì bạn cần thêm

using namespace std;

Dưới tiêu đề

Nếu cửa sổ thì hãy chắc chắn rằng bạn đặt tiêu đề chính xác #include<iostream.h>

#include<string.h>

Tham khảo điều này nó hoạt động hoàn hảo.

#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;không có gì để làm với os mục tiêu linux. Tương tự, việc thêm .hvào bao gồm không có gì để làm với os mục tiêu là windows #include <iostream>#include <string>sẽ hoạt động trên windows.
TĩnhBeagle
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.