2016-11-15 82 views
0

我是新来的c + +,我试图从数字文件中读取行,将行标记为字符串数组并将其转换这些数组项目转换为双精度数字。但在标记的过程中,我得到这个错误''变量'std :: stringstream mystream'有初始化,但不完整的类型''。我见过其他人的建议,我想不使用boost,其余的代码看起来很像我的,但出于某种原因我得到了这个错误。这是代码。C++ tokenizer中的错误'变量'std :: stringstream mystream'有初始化器但不完整的类型''

#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); 
    } 
} 

对这个问题得到一些反馈真的很不错。提前致谢。

+5

您不包含['std :: stringstream'](http://en.cppreference.com/w/cpp/io/basic_stringstream)的正确头文件。 –

+1

在不相关的说明中,如果您只是从字符串流中读取数据,请考虑使用['std :: istringstream'](http://en.cppreference.com/w/cpp/io/basic_istringstream), –

+2

最后,顺便说一句,你不需要循环。所有你需要的是['std :: istream_iterator'](http://en.cppreference.com/w/cpp/iterator/istream_iterator)和['std :: vector'构造函数](http:// en.cppreference.com/w/cpp/container/vector/vector)。注意矢量构造函数需要一对迭代器? –

回答

0

“可变‘富酒吧’具有初始化但不完全的类型”

此错误意味着变量bar已经以这样的方式被使用,即类型(foo)必须是完整的。一种仅仅被声明但未被定义的类型是不完整的。因此,要使foo完整,您必须包含foo的定义。

在你的情况下,foostd::stringstream。你没有包含std::stringstream的定义,所以它不是一个完整的类型。事实上,它可能没有保证它甚至被宣布 - 它恰好已经被其他标题之一声明。

解决方案:包含定义std::stringstream的标题。您可以在标准中找到所有标题和它们定义的类型,这些标题可以在网上免费下载。但是,如果您不介意二手规格,您可能会发现社区维护的C++参考网站更易于访问。

1

我想你忘记了

#include <sstream> 
在你的头

相关问题