我开始学习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;
}
};
正如前面提到的那样,最后一个函数看起来如下所示,主要是'cout':
public: std::string getCharacterName() {
return info::characterName;
}
提前致谢
// Pyracell
答案 0 :(得分:2)
您在.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");
可能就足够了继续研究这个项目,最好的学习方法是一次又一次地练习......
答案 1 :(得分:1)
这里有很多问题:
character
是全局的(除非必要,否则避免使用全局变量)character
分配了new
(尽可能使用自动存储){}
)getCharacterName
中的info.cpp
具有与标题characterName
是static
,它只出现在info.cpp
中(在这种情况下,它应该是普通成员;无论如何,它都需要在标题中声明)< / LI>
info.cpp
文件中使用class
关键字(将声明一个新类Info
,这意味着您的代码将无法编译,或者确实会非常奇怪),请使用info:info(std::string charName)
,info::~info()
和std::string info::getCharacterName()
定义功能(详情请参阅Uflex答案)