【问题标题】:Using int main(int argc, char **argv) in c++ [closed]在 C++ 中使用 int main(int argc, char **argv) [关闭]
【发布时间】:2015-08-12 04:13:21
【问题描述】:

我在尝试使用来自 mainchar** argv 时遇到问题。我的目标是使用argv[2] 传递给另一个名为Game 的类中的字符串。有人知道我如何使用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*&)

【问题讨论】:

  • 您不能将指向 char 的指针数组作为字符串传递给某个类。
  • 您能否编辑您的问题以包含您遇到问题的代码?
  • argv 类型的常用写法是char* argv[]。通过这种方式,您可以轻松地看到您可以编写 argv[2] 来访问程序的第二个参数,然后您可以使用其构造函数之一将其转换为 std::string。请注意,argv[0] 存储您的程序启动时使用的名称。
  • Game game(std::string(argv[2]));
  • @Err07 您显示的代码应该可以编译。你能显示错误信息的全文吗?还要检查是否在类定义中声明了构造函数 Game(std::string a)。

标签: c++ class main argv


【解决方案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 个(或更多)参数传递给它。

【讨论】:

    猜你喜欢
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2014-10-09
    • 2013-09-08
    • 1970-01-01
    • 2011-04-23
    相关资源
    最近更新 更多