.txt向量<string>、非类类型错误

.txt to vector <string>, non-class type error

本文关键字:类型 错误 string 向量 lt txt gt      更新时间:2023-10-16

嗨,我本周才开始学习C ,我需要一些帮助。基本上,我要做的是从.txt文件中读取并"将"它"转换"到向量字符串,然后显示。我的错误是在此行中:text.readfile(" scepario.txt"),它说:"在'text'中要求成员'readfile'请求,该'text''''''''''''''''''''''''''这意味着什么?而且我的方法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

再次, 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);

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

Conversion text;

有关详细答案,请参见此问题:没有参数的构造函数上没有语言标准?