Por que esta linha apresenta o erro Error: incomplete type is not allowed
?
stringstream ss;
c++
types
stringstream
pighead10
fonte
fonte
#include<stringstream>
ou algo que eu deveria ter usado? #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <string> #include <fstream> #include <cstdlib> #include <vector>Respostas:
#include <sstream>
e use o nome totalmente qualificado, ou seja,std::stringstream ss;
fonte
Alguns dos cabeçalhos do sistema fornecem uma declaração de encaminhamento
std::stringstream
sem a definição. Isso o torna um 'tipo incompleto'. Para corrigir isso, você precisa incluir a definição, que é fornecida no<sstream>
cabeçalho:fonte
Um
incomplete type
erro é quando o compilador encontra o uso de um identificador que ele sabe que é um tipo, por exemplo, porque viu uma declaração antecipada dele (por exemploclass stringstream;
), mas não viu uma definição completa para ele (class stringstream { ... };
).Isso pode acontecer para um tipo que você não usou em seu próprio código, mas só está presente por meio de arquivos de cabeçalho incluídos - quando você incluiu arquivos de cabeçalho que usam o tipo, mas não o arquivo de cabeçalho onde o tipo é definido. É incomum que um cabeçalho não inclua todos os cabeçalhos de que precisa, mas não é impossível.
Para coisas da biblioteca padrão, como a
stringstream
classe, use o padrão de linguagem ou outra documentação de referência para a classe ou as funções individuais (por exemploman
, páginas Unix , biblioteca MSDN, etc.) para descobrir o que você precisa#include
para usá-lo e o que namespace para encontrá-lo, se houver. Você pode precisar pesquisar por páginas onde o nome da classe aparece (por exemploman -k stringstream
).fonte