cocos2d x - Getting Member String from Class C++ -
i have class contain game level settings.
class stage { private: int level; int stars; std::string imgname; public: int getlevel(){ return level; }; void setlevel(int n){ level = n; }; int getstars(){ return stars; }; void setstars(int n){ stars = n; }; std::string getimgname(){ return imgname; }; void setimgname(std::string name){ imgname = name; }; }; then in program set info.
stage* stagesarr = new stage[3]; stagesarr[0].setlevel(0); stagesarr[0].setstars(1200); stagesarr[0].setimgname("stage0.png"); then if want info string giving me odd output.
cclog("level: %i", stagesarr[0].getlevel()); cclog("required stars: %i", stagesarr[0].getstars()); cclog("image name: %s", stagesarr[0].getimgname()); //level:0 //required stars: 1200 //image name: t%s //or random stuff. what missing here?
suspected cclog() uses same formatting rules <x>printf() function family does, need pass const char* format specifier %s.
your getimgname() returns std::string value though, isn't directly compatible const char*.
to achieve latter, should call std::string::c_str() function:
cclog("image name: %s", stagesarr[0].getimgname().c_str()); also can improve getter/setter functions specifying constness applicability more clear:
int getlevel() const { return level; } // ^^^^^^ int getstars() const { return stars; } // ^^^^^^ const std::string& getimgname() const { return imgname; } // ^^^^^ // ^^^^^^ void setimgname(const std::string& name) { imgname = name; } // ^^^^^ note:
matter of style can omit get / set prefixes getter/setter functions in c++, signatures disambiguate enough:
int level() const { return level; } void level(int n){ level = n; } int stars() const { return stars; } void stars(int n){ stars = n; } const std::string& imgname() const { return imgname; } void imgname(const std::string& name){ imgname = name; } my preferred style use lower caps , disambiguate class member variables _ postfix:
class stage { private: int level_; int stars_; std::string img_name_; public: int level() const { return level_; } void level(int n) { level_ = n; } int stars() const { return stars_; } void stars(int n){ stars_ = n; } const std::string& img_name() const { return img_name_; } void img_name(const std::string& name) { img_name_ = name; }; };
Comments
Post a Comment