变量不能产生适当的数据

时间:2011-08-24 18:16:39

标签: c++ variables

我的变量不会产生应有的数据。无论出于何种原因,我的字符串都是空的,但是当我尝试执行我的函数时,我的角色在构造时明确地将参数“holland”传递给name参数。尽管如此,当我调用get_name()时,字符串将返回为空。在其中,我有一个名为“character_count”的静态整数,它应该初始化为0,然后在每个字符创建时递增,以将值传递给字符的唯一ID。尽管如此,它仍然无法正常工作。

有人可以告诉我,我做错了吗?

这是我的来源:

#include "character.h"
#include <iostream>


int Character::char_count = 0;

Character::Character()
{
    this->char_id = char_count;
    char_count++;
}

Character::Character(std::string char_name, Race char_race, Gender char_gender)
{
    char_id = char_count;
    char_count++;
    name = char_name;
    race = char_race;
    gender = char_gender;
}

Character::~Character()
{

}

std::string Character::get_name()
{
    return this->name;
}

int Character::get_id()
{
    return this->char_id;
}

Race Character::get_race()
{
    return this->race;
}

Gender Character::get_gender()
{
    return this->gender;
}

这是我的头文件:

#include <iostream>
#ifndef CHARACTER_H
#define CHARACTER_H

enum Race {HUMAN, DARK_ELF};
enum Gender {MALE, FEMALE};
class Character
{
public:
    Character();
    Character(std::string& char_name, Race& char_race, Gender& char_gender);
    ~Character();

    int get_id();
    std::string get_name();
    Race get_race();
    Gender get_gender();

private:
    int char_id;
    static int char_count;
    std::string name;
    Race race;
    Gender gender;
};

#endif // CHARACTER_H

这是我的主要内容:

#include <QtCore/QCoreApplication>
#include <tinyxml/tinyxml.h>
#include "classowner.h"
#include "character.h"

int main(int argc, char *argv[])
{
    std::string holland_name = "holland";

    Character * holland = new Character(holland_name, HUMAN, MALE);
    delete holland;
    std::cout << "testing, mic...1, 2, 3...testing, testing. Bow, chica wow wowww!!1" << std::endl;
    std::cout << holland->get_id() << std::endl; //outputs as an 8 digit letter, when it should be either 0, or 1.
    std::cout << holland->get_name() << std::endl; //does not output at all.

    return 0;
}

3 个答案:

答案 0 :(得分:3)

那是因为你在完成它之前删除了内存。试试这个

Character * holland = new Character(holland_name, HUMAN, MALE);
std::cout << "testing, mic...1, 2, 3...testing, testing. Bow, chica wow wowww!!1" << std::endl;
std::cout << holland->get_id() << std::endl;
std::cout << holland->get_name() << std::endl;
delete holland;

仅在完成相关对象后删除。这种错误会调用未定义的行为,这意味着所有的赌注都会关闭,并且在运行代码时可能会发生任何事情。在某些方面,你很幸运,有一个明显的错误。您的程序似乎已经成功运行,您永远不会知道存在问题。

答案 1 :(得分:1)

您删除了一个对象,然后尝试访问它。那是Undefined Behavior™,可能会发生任何事情,包括你的编译器编写者用棒球棒击打你的头部。你应该简单地做

Character holland(holland_name, HUMAN, MALE);
std::cout << holland.get_id();

作为一般规则,如果您真的不知道自己在做什么,请不要使用newdelete - 始终使用明确编写的类为您管理内存或只需在堆栈上分配对象。

答案 2 :(得分:1)

您的代码实际上会调用未定义的行为。因为你删除了指针:

 delete holland;

在这一行之后,你再次使用它。未定义的行为!

现在如果它的未定义行为,则在此之后无法解释输出!