.txt到vector <string>,非类型错误

时间:2015-05-07 20:18:51

标签: c++

您好我本周刚开始学习C ++,我需要一些帮助。 基本上我想要做的是从.txt文件中读取&#34;转换&#34;它成为一个矢量字符串,然后显示它。 我的错误在这一行:text.readFile(&#34; scenario.txt&#34;),它说:&#34;请求成员&#39; readFile&#39; in&#39; text&#39;,这是非类型&#39; Conversion()&#39;&#34; 那是什么意思? 而且我的方法getLines()无法解析。

的main.cpp

#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include "Conversion.h"

using namespace std;

int main()
{
    vector<string> lines;

    Conversion text();

    if(text.readFile("scenario.txt") == true)
        lines = text.getLines();

    for(int i = 0; i < lines.size(); ++i)
        cout << lines[i] << endl;

    return 0;
}

Conversion.cpp

#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include "Conversion.h"

using namespace std;
vector<string> lines;

Conversion::Conversion(std::vector<std::string> lines) {
    lines.clear();
}
Conversion::Conversion() {
}

Conversion::~Conversion() {
}

bool Conversion::readFile(string filename) {
    ifstream file;
    string line;

    file.open(filename.c_str());

    if(!file.is_open())
        return false;

    while(getline(file, line))
        lines.push_back(line);

    return true;
}

vector<string> Conversion::getLines(){
    return lines;
}

Conversion.h

#ifndef CONVERSION_H_
#define CONVERSION_H_

#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>

class Conversion {
public:
    Conversion();
    Conversion(std::vector <std::string>);
    ~Conversion();
    std::vector<std::string> getLines();
    bool readFile(std::string);

private:
    std::vector<std::string> lines;
    std::string line;
    std::ifstream file;
};

#endif

2 个答案:

答案 0 :(得分:2)

再次,Conversion text();是函数声明,而不是类实例化。要调用默认构造函数,请将其更改为Conversion text;

您可能想要在构造函数中复制传递的行:

Conversion::Conversion(std::vector<std::string> const& lines) : lines(lines) { }

您的代码现在应该可以使用,但可以做一些改进。为了避免复制,getLines应该通过引用返回const:

std::vector<std::string> const& getLines();

// you don't have to create lines in main, you can print like this:

for(auto const& x : text.getLines())
    cout << x << endl;

我甚至在这里使用它:

bool readFile(std::string const&);

我希望这是最后一件事 - std::ifstream构造函数和open函数也需要std::string

file.open(filename);

答案 1 :(得分:1)

在实例化Conversion对象时需要删除括号:

Conversion text;

有关详细解答,请参阅此问题:Is no parentheses on a constructor with no arguments a language standard?