.txt 到向量 <string>,非类类型错误
Posted
技术标签:
【中文标题】.txt 到向量 <string>,非类类型错误【英文标题】:.txt to vector <string>, non-class type error 【发布时间】:2015-05-07 20:18:51 【问题描述】:您好,我这周刚开始学习 C++,需要一些帮助。 基本上我要做的是从 .txt 文件中读取并将其“转换”为矢量字符串,然后显示它。 我的错误在这一行: text.readFile("scenario.txt"),它说:“在'text'中请求成员'readFile',它是非类类型'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;
转化率.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;
转化率.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
【问题讨论】:
C++ 是按值传递的。lines.clear();
什么也不做。如果您打算使用全局变量(考虑到您有一个成员,实际上根本不应该将其声明为全局变量),您将不得不更改其中一个名称或以不同方式访问它。即使这样,取一个参数不使用它似乎毫无意义,并且成员已经被清除,因此无需再次清除它。
是的,我把它取下来了。谢谢
【参考方案1】:
再一次,Conversion text();
是一个函数声明,而不是一个类实例化。要调用默认构造函数,请将其更改为Conversion text;
您可能想在构造函数中复制传递的行:
Conversion::Conversion(std::vector<std::string> const& lines) : lines(lines)
您的代码现在应该可以工作了,但可以进行一些改进。为避免复制,getLines
应通过引用到常量返回:
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);
【讨论】:
感谢您的快速回复。是的,修复了'text.readFile(“scenario.txt”)'的错误现在我只需要修复'lines = text.getLines();'上的错误它告诉我“对 `Conversion::getLines()' 的未定义引用” @KH17 您可能只将const&
限定符添加到函数声明而不是定义,反之亦然。【参考方案2】:
实例化Conversion
对象时需要去掉括号:
Conversion text;
详细答案请参阅此问题:Is no parentheses on a constructor with no arguments a language standard?
【讨论】:
以上是关于.txt 到向量 <string>,非类类型错误的主要内容,如果未能解决你的问题,请参考以下文章