不完全なタイプは許可されていません:stringstream


109

この行でエラーが発生するのはなぜError: incomplete type is not allowedですか?

stringstream ss;

どのヘッダーファイルを含めましたか?
アラン・ストークス

#include<stringstream>使用すべきだったものがあると思いますか?#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>
pighead10

回答:


210

#include <sstream> 完全修飾名を使用しますすなわち std::stringstream ss;


エラーはおそらくstringstreamが未定義のもののジェネリック型として定義されていることが原因です。
mireazma 2015

Visual Studioでは、ファイルを含めずにstringstreamを使用できる場合があると思います。多分これがエラーの原因かもしれません
FindOutIslamNow 2018年

40

一部のシステムヘッダーはstd::stringstream、定義なしのの前方宣言を提供します。これはそれを「不完全な型」にします。これを修正するには、<sstream>ヘッダーに提供されている定義を含める必要があります。

#include <sstream>

17

incomplete typeコンパイラは、それはそれ(例えばの前方宣言を見ているので、それは知っている識別子の使用は、例えば、型で遭遇したときにエラーがあるclass stringstream;)、それはそれのための完全な定義を見ていません(class stringstream { ... };)。

これは、独自のコードでは使用していないが、インクルードヘッダーファイルを通じてのみ存在するタイプで発生する可能性があります-タイプを使用するヘッダーファイルをインクルードし、タイプが定義されているヘッダーファイルをインクルードしていない場合。ヘッダー自体に必要なすべてのヘッダーが含まれていないことは珍しいことではありませんが、不可能ではありません。

stringstreamクラスなどの標準ライブラリからのものについては、クラスまたは個々の関数(Unix manページ、MSDNライブラリなど)の言語標準またはその他のリファレンスドキュメント#includeを使用して、それを使用するために何が必要で何が必要かを理解します。存在する場合は、それを見つける名前空間。クラス名が表示されているページ(などman -k stringstream)を検索する必要がある場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.