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

时间:2013-06-16 11:25:59

标签: c++

我开始学习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

2 个答案:

答案 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具有与标题
  • 中不同的返回值
  • characterNamestatic,它只出现在info.cpp中(在这种情况下,它应该是普通成员;无论如何,它都需要在标题中声明)< / LI>
  • info.cpp文件中使用class关键字(将声明一个新类Info,这意味着您的代码将无法编译,或者确实会非常奇怪),请使用info:info(std::string charName)info::~info()std::string info::getCharacterName()定义功能(详情请参阅Uflex答案)