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

Popular posts from this blog

sql server - Cannot query correctly (MSSQL - PHP - JSON) -

php - trouble displaying mysqli database results in correct order -

C++ Linked List -