1

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

这是我的 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或其他任何东西。

下面是 SortingCompetition 的相关实现:

#include "SortingCompetition.h"

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

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

4

1 回答 1

2

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

改变:

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

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

于 2013-10-02T18:32:42.463 回答