通过对类对象的函数调用返回字符串值

C++ : Return string value through function call on a class object

本文关键字:函数调用 返回 字符串 对象      更新时间:2023-10-16

我已经开始学习c++,并尝试在此过程中制作游戏,以便有一些令人兴奋的事情要做。我已经制作了我的项目(使用Netbeans),使用main和另一个类来处理一些逻辑。在我深入研究逻辑之前,我做了一个测试,看看是否一切都如设想的那样。编译过程没有出现任何问题,但是当我运行我的项目时,我没有在控制台中看到想要的文本。我已经尝试了coutmain.cpp以及对象类本身,但没有运气的方式(没有输出从getCharacterName)。

如果您有时间快速看一下下面的代码,并为我指出正确的方向,我会很高兴的。

main.cpp

#include "character/info.h"
#include <iostream>
using namespace std;
info * character;
int main() {
    character = new info("PlayerName");
    character->getCharacterName();
    delete character;
}

info.h

#ifndef INFO_H
#define INFO_H
#include <iostream>
class info {
public:
    info(std::string) {};
    ~info() {};
    std::string getCharacterName() {};
}
#endif  /* INFO_H */

info.cpp

#include <iostream>
using namespace std;
class info {
        static string characterName;
    info(std::string charName) {
        cout<<"starting character";
        info::characterName = charName;
        cout<<"character made";
    }
    ~info() {
        cout<<"Object removed";
    }
public: void getCharacterName() {
        cout<< info::characterName;
    }
};

正如前面提到的,最后一个函数看起来也像下面这样,在main中使用了'cout':

public: std::string getCharacterName() {
        return info::characterName;
}

Thanks in advance

//Pyracell

在.h文件中声明了空函数。当你把声明和定义分开时,你需要这样做:

info.h

#ifndef INFO_H
#define INFO_H
#include <string>
class info {
public:
    info(std::string);
    ~info();
    std::string getCharacterName();
private
    std::string name;
};
#endif

info.cpp

#include "info.h"
#include <iostream>
using std::cout;
info::info(std::string charName) : name(charName) {
    cout<<"character made";
}
info::~info() {
    cout<<"Object removed";
}
std::string info::getCharacterName() {
    return name;
}

作为旁注,我认为有几件事值得一提:

  • 在您的main.cpp中,您声明一个全局变量来保存您的字符,这通常是我们试图避免的事情
  • 仍然在你的main.cpp中,你使用new创建你的角色,做info("MyCharacterName");可能就足够了
  • 上面的最后一点表明你声明了一个info,但它实际上是一个字符,你的类正在建模,也许类名info是不相关的
  • 以大写
  • 开头的类名通常是一种好的做法
坚持做这个项目,最好的学习方法是一次又一次的练习……

这里有很多问题:

  • character是一个全局变量(除非必要,避免全局变量)
  • characternew被分配(如果可能的话使用自动存储)
  • 头文件将方法定义为空(由于{})
  • getCharacterNameinfo.cpp中的返回值与头文件
  • 中的返回值不同
  • characterNamestatic,它只出现在info.cpp中(在这种情况下,它应该是一个普通成员;在任何情况下,它都需要在头文件中声明)
  • info.cpp文件中,你使用class关键字(这将声明一个新的类Info意味着你的代码要么不会编译,要么会非常奇怪),使用info:info(std::string charName), info::~info()std::string info::getCharacterName()来定义函数(检查Uflex回答的详细信息)