Jenis yang tidak lengkap tidak diperbolehkan: stringstream

109

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

stringstream ss;
pighead10
sumber
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;

Prasoon Saurav
sumber
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>
Yakov Galka
sumber
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).

rakslice
sumber