在主函数之外使用命令行参数

Using command line parameters outside of main function

我想要一个程序读取用户通过命令行输入的文件,然后在代码主体中使用。

参见下面的示例代码:

#include <iostream>
#include <fstream>

struct run_t {
    std::string file;
};

run_t run;

const POINTER* ptr = toy(run.file, 0);

// Here hardcoded the FILENAME as a string => code works.
// I am trying to get it to work when I read in the filename from the
// first entry on the command line upon program execution:
//
//const POINTER* ptr = toy("FILENAME", 0);

double Toy1(double a, double b, double c) {
    return ptr->func(a, b, c);
};

double Toy2(double d) {
    double factor = pow(d, 2); //some dummy prefactor
    return factor * Toy1(4, 5, 6);
};

int main(int argc, char* argv[])
{
    run_t run;
    run.file = argv[1];
    std::cout << Toy2(1) << std::endl;
    return 0;
}

实际的 toyToy 函数是特定于软件的,并被附加的包含文件识别。如果我使用字符串 FILENAMEtoy(run.file, 0) 中手动硬编码 run.file,使用单个命令行参数(例如 ./exe 1 编译和执行)然后程序运行。

我的问题是,如何修改上面的代码,使命令行中输入的值FILENAME被读取为run.file?也就是说,让 ./exe FILENAME 工作?我已经尝试将 argv[1] 声明为 toy 的参数,但我还没有让它起作用。

这是我测试过的代码。试试这个

#include <iostream>
#include <fstream>
#include <math.h>

struct run_t {
    std::string file;
};

run_t run;

class POINTER{
  public:
    POINTER(std::string file , int num){std::cout << "POINTER::POINTER(std::string file , int num)file " << file << std::endl;};
    double func(double a, double b, double c) {
        POINTER *toy(std::string file , int num);
        return (double)0;
    }
};


POINTER *toy(std::string file , int num)
{
    POINTER* ptr = new POINTER(file , num);
    std::cout << "POINTER *toy(std::string file , int num) file " << file << std::endl;
    return ptr;
}

const POINTER * ptr;

double Toy1(double a, double b, double c) {
    POINTER * ptrCst = const_cast<POINTER *>(ptr);
    return ptrCst->func(a, b, c);
};

double Toy2(double d) {
    double factor = pow(d, 2); //some dummy prefactor
    return factor * Toy1(4, 5, 6);
};

int main(int argc, char* argv[])
{
    run.file = argv[1];
    POINTER * ptrCst = const_cast<POINTER *>(ptr);
    ptrCst = toy(run.file, 0);
    std::cout << Toy2(1) << std::endl;
    while(1);
    return 0;
}

首先,ptr 初始化得太早,在 argv[1] 不可用的时候。

其次,main局部变量run与用于设置ptr的全局run无关Toy1.

由于我们不知道 toy 是什么,我们无法回答更多。 8-DK 答案是一种可能性。