代码之家  ›  专栏  ›  技术社区  ›  tbgeorge

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

  •  1
  • tbgeorge  · 技术社区  · 11 年前

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

    这是我的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
    

    此处所有功能必须保持不变。即 SortingCompetition(const string& inputFileName); 必须保持这种状态。。。我无法删除 const 或其他任何东西。

    以下是分拣比赛的相关实施:

    #include "SortingCompetition.h"
    
    SortingCompetition::SortingCompetition(const string& inputFileName){
        input_ = inputFileName;
    }
    void SortingCompetition::setFileName(const string& inputFileName){
        input_ =  inputFileName;
    }
    

    这就是我遇到问题的地方,我没有正确地将输入文件从命令参数传递到私有变量。我已经找了很长一段时间,但找不到解决方案。

    1 回复  |  直到 11 年前
        1
  •  2
  •   sehe    11 年前

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

    更改:

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

    这将复制 价值 因此,构造函数的参数(或 setFilename )只是暂时的