【问题标题】:c++ get user name in a class and pass it to a functionc ++在类中获取用户名并将其传递给函数
【发布时间】:2017-06-17 05:09:41
【问题描述】:

好的。所以我要做的是创建一个名为 greeter 的类,让它获取当前用户名,然后将其传递给一个显示“Hello(用户名)”的函数。

到目前为止,我所拥有的是:

#include <iostream>
#include <string>

using namespace std;


class greet
    {
    public:

    void hello(string name)
    {
    cout << "Hello, " + name + "!" << endl;
    }
    };

  int main()
      {
      greet user;
      user.hello(name);
      return 0;
      }

“name”原本是作为来自用户输入的参数直接传递给函数的,但是

user.hello()

不会接受变量“名称”,我宁愿程序自己获取用户名。所以我的问题是如何让 C++ 自己获取用户名并将其从变量传递给 user.hello()

【问题讨论】:

  • 您的目标平台是什么?不同的操作系统对用户的实现方式不同,提供不同的API查询用户信息。 C++ 本身或 STL 中没有任何东西可以为您处理这个问题。
  • 最好是一个跨平台的解决方案,但我的系统是 Linux,所以如果它不能“一刀切”那么适用于 Linux。
  • 我不是一个实用的项目,只是为了帮助我弄清楚课程
  • 不要将您的问题标题更改为“已解决”。如果有帮助,请接受答案或发布您自己的答案。

标签: c++ open-source


【解决方案1】:

您可以使用std::getenv 获取当前用户的名称。 Linux 的环境变量是"USER"。 Windows 的环境变量是"USERNAME"

在 Linux 上,以下应该可以工作。

int main()
{
   greet user;
   char const* name = std::getenv("USER");

   // Windows
   // char const* name = std::getenv("USERNAME");

   user.hello(name);
   return 0;
}

【讨论】:

  • @Josh,您需要将#include &lt;cstdlib&gt; 添加到您的文件中。
  • 感谢 builder (IDE) 没有给出更多错误,但 gcc 说:在函数 'int main()' 中:错误:没有匹配函数调用 'greet::hello(const char*& )' user.hello(name); ^ 注意:候选人:void greet::hello() void hello() ^~~~~ 候选人期望 0 个参数,提供 1 个
  • 看看ideone.com/Y48u7X的示例程序。由于未定义环境变量"USER",因此它不会在那里运行。但它构建得很好。
  • 当我得到那个错误时,这几乎就是我所拥有的(我缩进不同)。我尝试了其他方法,但抛出了很多错误,所以我复制/粘贴了该示例,它建议我将“name”重命名为“rename”
  • 好的。将其重命名为重命名并编译并运行良好
【解决方案2】:
#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;
class greet
{
   public:

      void hello(string user)
      {
         cout << "Hello, " + user + "!" << endl;
      }
};

int main()
{
   greet user;
   char const* USER = std::getenv("USER");
   user.hello(USER);
   return 0;
}

【讨论】:

    【解决方案3】:
    #include <iostream>
    #include <string>
    #include <cstdlib>
    
    using namespace std;
    
    class greet {
    private:
        string userName() const {
            static string user = getenv(
                #ifdef WIN32
                "USERNAME"
                #else
                "USER"
                #endif
            );
            return user;
        }
    
    public:
        void hello() {
            cout << "Hello, " + userName() << "!" << endl;
        }
    };
    
    int main() {
        greet user;
        user.hello();
        return 0; 
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-11
      • 1970-01-01
      • 2016-08-28
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多