将命令行参数输入文件传递给要解析的类

Posted

技术标签:

【中文标题】将命令行参数输入文件传递给要解析的类【英文标题】:Passing a command line argument input file to a class to parse 【发布时间】:2013-10-09 06:18:21 【问题描述】:

我的问题可能有一个非常简单的解决方案,但是我在将输入文件(从命令行参数)传递到类进行解析时遇到了一些问题。

这是我的 main.cpp 代码的相关部分:

#include <iostream>
#include <chrono>
#include "SortingCompetition.h"

int main(int argc, char** argv)

    if (argc != 3)
    
        std::cerr << "Invalid arguments" << std::endl;
        std::cerr << "Usage: ./a.out <input file> <output file>" << std::endl;
        return 1;
    

    SortingCompetition sorter(argv[1]);

    return 0;

这是 SortingCompetition.h 文件:

#ifndef SORTINGCOMPETITION_H_
#define SORTINGCOMPETITION_H_

#include <string>
#include <vector>
using namespace std;

class SortingCompetition
private:
    string& input_;
    vector<string> data_;
public:
    SortingCompetition(const string& inputFileName);
    void setFileName(const string& inputFileName);
    bool readData();
    bool prepareData();
    void sortData();
    void outputData(const string& outputFileName);
;

#endif

这里的所有功能都必须保持不变。 IE。 SortingCompetition(const string&amp; inputFileName); 必须保持这种状态...我无法删除 const 或其他任何内容。

下面是SortingCompetition的相关实现:

#include "SortingCompetition.h"

SortingCompetition::SortingCompetition(const string& inputFileName)
    input_ = inputFileName;

void SortingCompetition::setFileName(const string& inputFileName)
    input_ =  inputFileName;

这是我遇到问题的地方,我没有将输入文件从命令参数正确传递给私有变量。找了好久,没找到解决办法。

【问题讨论】:

“解析”的重要性是什么?我不认为这是相关的。 readData函数中,我试图解析输入文件:bool SortingCompetition::readData() string temp; input_ &gt;&gt; temp; 哦啊哈。那么还有其他问题吗? 【参考方案1】:

您正确地传递了它,但您正在存储对临时的引用。这就是问题所在。

变化:

class SortingCompetition
private:
    string input_;  // THIS LINE
    vector<string> data_;

这会复制,因此构造函数(或setFilename)的参数只是一个临时参数并不重要

【讨论】:

好的,谢谢。但是我要改成什么呢?如果我在其中粘贴const,我将无法再解析它。

以上是关于将命令行参数输入文件传递给要解析的类的主要内容,如果未能解决你的问题,请参考以下文章

如何传递文件中包含的命令行参数并保留该文件的名称?

如何将参数(不是命令行参数)传递给批处理脚本中的函数

Java 命令行参数

Python语言命令行参数解析接收参数执行脚本的三种方法

如何在C++中解析命令行参数

从命令行传递参数作为列表并解析它