c – 非静态成员函数的非法调用

c – 非静态成员函数的非法调用,第1张

概述我在下面的这个功能有问题: char* GetPlayerNameEx(int playerid){ char Name[MAX_PLAYER_NAME], i = 0; GetPlayerName(playerid, Name, sizeof(Name)); std::string pName (Name); while(i == 0 || i != p 我在下面的这个功能有问题:
char* GetPlayernameEx(int playerID){    char name[MAX_PLAYER_name],i = 0;    GetPlayername(playerID,name,sizeof(name));    std::string pname (name);    while(i == 0 || i != pname.npos)    {        if(i != 0) i++;        int Underscore = pname.find("_",i);        name[Underscore] = ' ';    }    return name;}

宣言:

char* GetPlayernameEx(int playerID);

用法:

sprintf(string,"%s",CPlayer::GetPlayernameEx(playerID));

现在我的问题是

删除了个人信息.

如果这与我怀疑它有什么关系,那么这个函数包含在“Class”头(Declartion)中.

此外,我不知道为什么,但我不能让“代码”框正确适合.

解决方法 您不能将这些函数创建为静态(没有大量调整),因为您试图修改特定实例的数据.要解决您的问题:
class CPlayer{public:    // public members    // since you are operating on class member data,you cannot declare these as static    // if you wanted to declare them as static,you would need some way of getting an actual instance of CPlayer    char* GetPlayernameEx(int playerID);    char* GetPlayername(int playerID,char* name,int size);private:    // note:  using a std::string would be better    char m_name[MAX_PLAYER_name];};// note:  returning a string would be better herechar* CPlayer::GetPlayernameEx(int playerID){    char* name = new char[MAX_PLAYER_name];    memset(name,MAX_PLAYER_name,0);    GetPlayername(playerID,m_name,sizeof(m_name));    std::string sname(m_name);    std::replace(sname.begin(),sname.end(),'_',' ');    ::strncpy(sname.c_str(),MAX_PLAYER_name);    return name;}// in your usageCPlayer player;// ...sprintf(string,player.GetPlayernameEx(playerID));
总结

以上是内存溢出为你收集整理的c – 非静态成员函数的非法调用全部内容,希望文章能够帮你解决c – 非静态成员函数的非法调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1247203.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存