您好我本周刚开始学习C ++,我需要一些帮助。 基本上我想要做的是从.txt文件中读取"转换"它成为一个矢量字符串,然后显示它。 我的错误在这一行:text.readFile(" scenario.txt"),它说:"请求成员' readFile' in' text',这是非类型' Conversion()'" 那是什么意思? 而且我的方法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
答案 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?