通过对类对象的函数调用返回字符串值
C++ : Return string value through function call on a class object
我已经开始学习c++,并尝试在此过程中制作游戏,以便有一些令人兴奋的事情要做。我已经制作了我的项目(使用Netbeans),使用main和另一个类来处理一些逻辑。在我深入研究逻辑之前,我做了一个测试,看看是否一切都如设想的那样。编译过程没有出现任何问题,但是当我运行我的项目时,我没有在控制台中看到想要的文本。我已经尝试了cout
从main.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
是一个全局变量(除非必要,避免全局变量) -
character
与new
被分配(如果可能的话使用自动存储) - 头文件将方法定义为空(由于
{}
) -
getCharacterName
在info.cpp
中的返回值与头文件 中的返回值不同 -
characterName
是static
,它只出现在info.cpp
中(在这种情况下,它应该是一个普通成员;在任何情况下,它都需要在头文件中声明) - 在
info.cpp
文件中,你使用class
关键字(这将声明一个新的类Info
意味着你的代码要么不会编译,要么会非常奇怪),使用info:info(std::string charName)
,info::~info()
和std::string info::getCharacterName()
来定义函数(检查Uflex回答的详细信息)
相关文章:
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 返回指向对象的指针的函数调用是否为 prvalue?
- 如何在递归函数调用中返回当前函数值
- 了解在返回值之前和之后使用 EAX 的函数调用
- 为什么 c++11 std::normal_distribution 在从函数调用时返回相同的模式?
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 从类似构造函数的调用返回模板化智能指针
- C ++ DLL导入:函数调用返回错误的结果
- return 语句,该语句调用在返回 void 的函数中返回 void 的函数
- WScript.CreateObject 在调用 C++ COM dll 函数时返回空
- 当我同时将 T& 和 T 作为同名函数的返回类型时,如何使用 T& 调用函数
- 为什么函数调用是xvalue(如果返回类型为rvalue)
- GCC 9.1 返回 void& 作为显式析构函数调用的结果类型。这是一个错误吗?
- 当设置对象等于另一个函数的返回值时,为什么要调用移动构造函数/分配
- 调用函数后返回 0 而不"return(0);"
- 对于相同的输入参数,多个函数调用返回不同的结果
- 复制构造函数调用 - 返回值
- 通过对类对象的函数调用返回字符串值
- Shell程序中execvp函数调用返回无法访问错误
- c++只赋值函数调用返回的结构体的一部分