无法在构造函数

时间:2015-11-29 19:43:41

标签: c++ argv

无法在myarm.cpp中的parseCmdline函数中访问argv值,该函数在构造函数中初始化。 不知道如何在构造函数中传递/初始化main(int argc,char * argv [])中的值?

的main.cpp

#include "myarm.h"    
int main(int argc, char *argv[]){
    cout<<"argv is:"<<argv[2]<<endl;
    MyArm arm;

myarm.cpp

#include "myarm.h"

MyArm::MyArm(){
    nj = 0;
    done = false;
    times = 0;
    count = 50;
    which_joint = 0;
    cout<<"argv is:"<<argv[2]<<endl;
    parseCmdline();
}

int MyArm::parseCmdline() {
    params.fromCommand(argc, argv);
    if (!params.check("robot")){
        cout<<"Please specify name of the robot"<<endl;
        cout<<"--robot name (e.g. TechNit)"<<endl;
        return 1;
    }

    else if(!params.check("element")){
        cout<<"Please specify name of the element"<<endl;
        cout<<"--element name (e.g. left_arm)"<<endl;
        return 1;
    }
}

2 个答案:

答案 0 :(得分:0)

将参数从main传递到其他函数很简单,只需声明main之类的其他函数:

void my_method(int argument_count, char * * arg_list);

int main(int argument_count, char * * arg_list)
{
  my_method(argument_count, arg_list);
  return EXIT_SUCCESS;
}

void my_method(int argument_count, char * * arg_list)
{
  std::cout << "Argument Count: " << argument_count << "\n";
  for (int i = 0; i < argument_count; ++i)
  {
    std::cout << "Argument [" << i << "]: " << arg_list[i] << "\n";
  }
}

答案 1 :(得分:0)

向构造函数添加参数:

MyArm::MyArm(int argc, char *argv[])

然后实例化为

MyArm arm(argc, argv);

修改

但事实证明这些参数需要由

使用
int MyArm::parseCmdline()

所以parseCmdline也需要重新定义

int MyArm::parseCmdline(int argc, char *argv[])

并使用

进行调用
parseCmdline(argc, argv);

看模式?如果没有,我建议您更深入地阅读教科书或getting a better text book