2016-11-15 2 views
0

Ich bin neu in C++ und ich versuche, Zeilen aus einer Datei mit Zahlen, tokenize Linien in String-Arrays zu lesen und konvertieren diese Array-Elemente in doppelte Genauigkeitszahlen. Aber im Prozess der Tokenisierung bekomme ich diesen Fehler '' Variable 'std :: stringstream meinstream' hat Initialisierung, aber unvollständiger Typ ''. Ich habe andere Leute Vorschläge gesehen und ich möchte es tun, ohne Boost zu verwenden, und der Rest der Codes sieht ziemlich ähnlich wie meiner aus, aber ich bekomme diesen Fehler aus irgendeinem Grund. Hier ist der Code.C++ Fehler in tokenizer ‚‘ Variable ‚std :: string mystream‘ hat Initialisierung, aber unvollständigen Typ ‚‘

#include <stdio.h> 
#include <string.h> 
#include <string> 
#include <vector> 
#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    vector<string> tokens; 
    string phrase="sdfs sdfs trt we rw"; 
    stringstream mystream (phrase); 
    string temp; 

    while(getline(mystream,temp,' ')){ 
     tokens.push_back(temp); 
    } 
} 

Es wäre wirklich nett, ein Feedback zu diesem Problem zu bekommen. Danke im Voraus.

+5

Sie enthalten nicht die richtigen Header für [ 'std :: stringstream'] (http://en.cppreference.com/w/cpp/io/basic_stringstream). –

+1

auf einer nicht verwandte Notiz, wenn Sie aus dem String-Stream lesen, prüfen, mit [ 'std :: istringstream'] (http://en.cppreference.com/w/cpp/io/basic_istringstream) statt, –

+2

Schließlich Sie brauchen die Schleife übrigens nicht. Alles, was Sie brauchen, ist das Wissen von ['std :: istream_iterator'] (http://en.cppreference.com/w/cpp/iterator/istream_iterator) und den [' std :: vector' Konstruktoren] (http: // de.cppreference.com/w/cpp/container/vector/vector). Beachten Sie, dass der Vektorkonstruktor ein Paar Iteratoren verwendet? –

Antwort

0

„variable‚foo bar‘hat Initialisierer aber unvollständigen Typ“

Dieser Fehler bedeutet, dass die Variable bar hat so verwendet worden, dass der Typ (foo) vollständig sein muss. Ein Typ, der lediglich deklariert, aber nicht definiert wurde, ist unvollständig. Um also foo abzuschließen, müssen Sie die Definition foo einschließen.

In Ihrem Fall ist foostd::stringstream. Sie haben die Definition von std::stringstream nicht eingeschlossen, daher handelt es sich nicht um einen vollständigen Typ. In der Tat gibt es möglicherweise keine Garantie, dass es überhaupt deklariert wurde - es ist nur zufällig von einem der anderen Header deklariert worden.

Lösung: Fügen Sie die Header, std::stringstream definiert. Sie können alle Überschriften und die von ihnen definierten Typen im Standard finden, der als Entwurf frei online verfügbar ist. Wenn Sie sich jedoch nicht mit der Spezifikation aus zweiter Hand befassen, können Sie feststellen, dass eine Community-geführte C++ - Referenzwebseite leichter zugänglich ist.

1

Ich glaube, Sie

#include <sstream> 

in Ihrem Header vergessen.

Verwandte Themen