Jenis yang tidak lengkap tidak diperbolehkan: stringstream


109

Mengapa baris ini memberikan kesalahan Error: incomplete type is not allowed?

stringstream ss;

File header apa yang telah Anda sertakan?
Alan Stokes

Saya menduga ada #include<stringstream>atau sesuatu yang seharusnya saya gunakan? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>
pighead10]

Jawaban:


210

#include <sstream> dan gunakan nama yang sepenuhnya memenuhi syarat yaitu std::stringstream ss;


Kesalahannya mungkin karena stringstream didefinisikan sebagai jenis umum dari sesuatu yang tidak ditentukan.
mireazma

Saya pikir studio visual terkadang memungkinkan untuk menggunakan stringstream tanpa menyertakan file. Mungkin inilah penyebab kesalahan
FindOutIslamNow

40

Beberapa tajuk sistem memberikan deklarasi maju std::stringstreamtanpa definisi. Ini membuatnya menjadi 'tipe tidak lengkap'. Untuk memperbaikinya, Anda perlu menyertakan definisi, yang disediakan di <sstream>header:

#include <sstream>

17

Sebuah incomplete typekesalahan ketika compiler bertemu penggunaan sebuah identifier yang ia tahu adalah jenis, misalnya karena telah melihat ke depan deklarasi itu (misalnya class stringstream;), tetapi belum melihat definisi penuh untuk itu ( class stringstream { ... };).

Ini bisa terjadi untuk jenis yang belum Anda gunakan dalam kode Anda sendiri tetapi hanya ada melalui file header yang disertakan - saat Anda menyertakan file header yang menggunakan jenis tersebut, tetapi bukan file header tempat jenis tersebut ditentukan. Header tidak biasa jika tidak menyertakan semua header yang dibutuhkannya, tetapi bukan tidak mungkin.

Untuk hal-hal dari perpustakaan standar, seperti stringstreamkelas, gunakan standar bahasa atau dokumentasi referensi lainnya untuk kelas atau fungsi individu (misalnya manhalaman Unix , perpustakaan MSDN, dll.) Untuk mencari tahu apa yang Anda perlukan #includeuntuk menggunakannya dan apa namespace untuk menemukannya jika ada. Anda mungkin perlu mencari halaman di mana nama kelas muncul (misalnya man -k stringstream).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.