.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&amp; 限定符添加到函数声明而不是定义,反之亦然。【参考方案2】:

实例化Conversion对象时需要去掉括号:

Conversion text;

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

【讨论】:

以上是关于.txt 到向量 <string>,非类类型错误的主要内容,如果未能解决你的问题,请参考以下文章

C++ map<string, vector<pair<string, string> > > :将映射添加到空向量?

C# SWIG 向量<字符串> 到字符串 []

c++ 主题名称到字符串向量的映射

现有对象的向量

c++:向量<string>的迭代

将矩阵加载到 2D 向量 C++