ไม่อนุญาตประเภทที่ไม่สมบูรณ์: stringstream


109

ทำไมบรรทัดนี้ให้ข้อผิดพลาดError: incomplete type is not allowed?

stringstream ss;

คุณมีไฟล์ส่วนหัวอะไรบ้าง?
Alan Stokes

ฉันเดาว่ามี#include<stringstream>หรือบางอย่างที่ฉันควรใช้? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>
pighead10

คำตอบ:


211

#include <sstream> และใช้ชื่อที่มีคุณสมบัติครบถ้วนคือ std::stringstream ss;


ข้อผิดพลาดอาจเนื่องมาจากสตริงสตรีมถูกกำหนดให้เป็นประเภททั่วไปของสิ่งที่ไม่ได้กำหนด
mireazma

ฉันคิดว่าสตูดิโอภาพบางครั้งอนุญาตให้ใช้สตริงสตรีมโดยไม่รวมไฟล์ บางทีนี่อาจเป็นสาเหตุของข้อผิดพลาด
FindOutIslamNow

40

ส่วนหัวของระบบบางส่วนมีการประกาศล่วงหน้าstd::stringstreamโดยไม่มีคำจำกัดความ สิ่งนี้ทำให้เป็น 'ประเภทที่ไม่สมบูรณ์' ในการแก้ไขว่าคุณต้องใส่คำจำกัดความซึ่งมีให้ใน<sstream>ส่วนหัว:

#include <sstream>

17

incomplete typeข้อผิดพลาดคือเมื่อคอมไพเลอร์ได้พบกับการใช้งานของตัวระบุว่ามันรู้ว่าเป็นชนิดเช่นเพราะมันได้เห็นไปข้างหน้าการประกาศของมัน (เช่นนั้นclass stringstream;) แต่มันยังไม่เห็นความหมายที่เต็มรูปแบบสำหรับมัน ( class stringstream { ... };)

สิ่งนี้อาจเกิดขึ้นกับประเภทที่คุณไม่ได้ใช้ในรหัสของคุณเอง แต่จะปรากฏผ่านไฟล์ส่วนหัวที่รวมไว้เท่านั้น - เมื่อคุณรวมไฟล์ส่วนหัวที่ใช้ประเภท แต่ไม่ใช่ไฟล์ส่วนหัวที่กำหนดประเภทไว้ เป็นเรื่องผิดปกติที่ส่วนหัวจะไม่รวมส่วนหัวทั้งหมดที่ต้องการ แต่ไม่ใช่เรื่องที่เป็นไปไม่ได้

สำหรับสิ่งต่างๆจากไลบรารีมาตรฐานเช่นstringstreamคลาสให้ใช้มาตรฐานภาษาหรือเอกสารอ้างอิงอื่น ๆ สำหรับคลาสหรือฟังก์ชันแต่ละฟังก์ชัน (เช่นmanเพจUnix ไลบรารี MSDN ฯลฯ ) เพื่อค้นหาว่าคุณต้อง#includeใช้อะไรและอะไร เนมสเปซเพื่อค้นหาในถ้ามี คุณอาจต้องค้นหาหน้าที่มีชื่อคลาสปรากฏขึ้น (เช่นman -k stringstream)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.