在C++中使用int main(int argc,char ** argv)

问题描述:

我遇到了试图使用main中的char** argv的问题。我的目标是使用argv[2]传递给另一个类Game中的字符串。有人知道我如何使用argv并将它作为字符串传递给另一个类?在C++中使用int main(int argc,char ** argv)

int main(int argc, char **argv) 
{ 
    Game game(argv[2]); 
    game.runsecondmethod(); 
} 

而且在Game.cpp

Game::Game(std::string a) 
{ 
    write.filename = a; 
} 
error, no match for call to (Game)(char*&) 
+1

您不能将指向char的指针数组作为字符串传递给某个类。 – ForceBru

+4

你能编辑你的问题以包含你有问题的代码吗? –

+0

编写'argv'类型的常用方法是'char * argv []'。通过这种方式,你可以很容易地看到你可以编写'argv [2]'来访问程序的第二个参数,然后你可以使用它的一个构造函数将它转换成一个'std :: string'。请注意,'argv [0]'存储程序开始的名称。 –

您还没有实际提供表现出你的问题,但代码,回答你的问题,如何通过argv[2]作为一个字符串转换为功能包括

#include <cstring> 
    #include <iostream> 
    void func(const char *s) 
    { 
     // treat s as a zero terminated string 

     if (std::strcmp(s, "Hello") == 0) 
     { 
      std::cout << "You said hello\n"; 
     } 
    } 

    int main(int argc, char **argv) 
    { 
     if (argc >= 3) 
     func(argv[2]); 
     else 
     std::cout << "You have not supplied an argv[2]\n"; 
    } 

#include <string> 
    #include <iostream> 
    void func2(const std::string &s) 
    { 
     if (s == "Hello") 
     { 
      std::cout << "You said hello\n"; 
     } 
    } 

    int main(int argc, char **argv) 
    { 
     if (argc >= 3) 
     func2(argv[2]); 
     else 
     std::cout << "You have not supplied an argv[2]\n"; 
    } 

上面的第一个例子(除了std命名空间,std::cout和C++头的使用)基本上香草C.

第二示例使用std::string类,所以串的比较是可能使用==运营商。请注意,main()在调用func2()时隐含地将argv[2]转换为std::string(因为std::string具有允许进行转换的构造函数),然后将其传递给该函数。

在这两种情况下,main()都会检查argc以确保已将2个(或更多)参数传递给它。