Loại không đầy đủ không được phép: stringstream


109

Tại sao dòng này báo lỗi Error: incomplete type is not allowed?

stringstream ss;

Bạn đã bao gồm những tệp tiêu đề nào?
Alan Stokes,

Tôi đoán có một #include<stringstream>hoặc một cái gì đó tôi nên sử dụng? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>
pighead 10

Câu trả lời:


210

#include <sstream> và sử dụng tên đủ điều kiện, tức là std::stringstream ss;


Lỗi có thể là do dòng chuỗi được định nghĩa là một loại chung của một thứ gì đó không xác định.
mireazma

Tôi nghĩ rằng visual studio đôi khi cho phép sử dụng stringstream mà không bao gồm tệp. Có lẽ đây là nguyên nhân gây ra lỗi
FindOutIslamNow

40

Một số tiêu đề hệ thống cung cấp một khai báo chuyển tiếp std::stringstreammà không có định nghĩa. Điều này làm cho nó trở thành một 'loại không hoàn chỉnh'. Để khắc phục điều đó, bạn cần bao gồm định nghĩa, được cung cấp trong <sstream>tiêu đề:

#include <sstream>

17

Một incomplete typelỗi là khi trình biên dịch gặp phải việc sử dụng một mã định danh mà nó biết là một kiểu, chẳng hạn vì nó đã thấy một khai báo chuyển tiếp của nó (ví dụ class stringstream;), nhưng nó chưa thấy định nghĩa đầy đủ cho nó ( class stringstream { ... };).

Điều này có thể xảy ra đối với một loại mà bạn chưa sử dụng trong mã của riêng mình nhưng chỉ hiển thị thông qua các tệp tiêu đề được bao gồm - khi bạn đã bao gồm các tệp tiêu đề sử dụng loại, nhưng không phải tệp tiêu đề nơi loại được xác định. Thật bất thường khi một tiêu đề không tự nó bao gồm tất cả các tiêu đề mà nó cần, nhưng không phải là không thể.

Đối với những thứ từ thư viện chuẩn, chẳng hạn như stringstreamlớp, hãy sử dụng chuẩn ngôn ngữ hoặc tài liệu tham khảo khác cho lớp hoặc các chức năng riêng lẻ (ví dụ: các mantrang Unix , thư viện MSDN, v.v.) để tìm ra những gì bạn cần #includesử dụng và những gì không gian tên để tìm nó trong nếu có. Bạn có thể cần phải tìm kiếm các trang mà tên lớp xuất hiện (ví dụ man -k stringstream).

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.