2015-05-29 77 views
-5

我遇到了試圖使用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]'存儲程序開始的名稱。 –

回答

1

您還沒有實際提供表現出你的問題,但代碼,回答你的問題,如何通過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個(或更多)參數傳遞給它。

相關問題