C++ 变量不能生成正确的数据

C++ 变量不能生成正确的数据,c++,variables,C++,Variables,我的变量没有产生应有的数据。不管出于什么原因,我的字符串是空的,但是当我尝试执行我的函数时,我的字符在构造时会将参数“holland”传递给name参数。尽管如此,当我调用get_name()时,字符串返回为空。在这一点上,我有一个名为“character_count”的静态整数,它应该初始化为0,然后在每个角色创建时递增,以将值传递给角色的唯一id。尽管如此,它仍然不能正常工作 有人能告诉我我做错了什么吗 以下是我的消息来源: #include "character.h" #include &

我的变量没有产生应有的数据。不管出于什么原因,我的字符串是空的,但是当我尝试执行我的函数时,我的字符在构造时会将参数“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;
}
#包括“character.h”
#包括
int Character::char\u count=0;
Character::Character()
{
此->字符id=字符计数;
字符计数++;
}
Character::Character(标准::string char\u name、Race char\u Race、Gender char\u Gender)
{
char\u id=char\u计数;
字符计数++;
名称=字符名称;
种族=char_种族;
性别=特征性别;
}
字符::~Character()
{
}
std::字符串字符::get_name()
{
返回此->名称;
}
int Character::get_id()
{
返回此->字符id;
}
种族角色::get_Race()
{
返回此->比赛;
}
性别角色::获取性别()
{
返回此->性别;
}
这是我的头文件:

#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
#包括
#ifndef字符
#定义字符
enum种族{人类,黑暗精灵};
枚举性别{男性,女性};
类字符
{
公众:
字符();
字符(标准:字符串和字符名、种族和字符种族、性别和字符性别);
~Character();
int get_id();
std::string get_name();
竞速获得竞速();
性别获得性别();
私人:
int char_id;
静态整数字符计数;
std::字符串名;
种族;
性别;
};
#endif//CHARACTER\u 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;
}
#包括
#包括
#包括“classowner.h”
#包括“character.h”
int main(int argc,char*argv[])
{
std::string holland_name=“holland”;
Character*holland=新角色(holland_名称,人类,男性);
删除荷兰;

std::cout这是因为您在完成内存之前就删除了它。请尝试此操作

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;
Character*holland=新角色(holland_name,人类,男性);

std::cout这是因为您在完成内存之前就删除了它。请尝试此操作

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;
Character*holland=新角色(holland_name,人类,男性);

您删除了一个对象,然后试图访问它。这是未定义的行为™ 任何事情都有可能发生,包括你的编撰者过来用棒球棒打你的头,你应该这么做

Character holland(holland_name, HUMAN, MALE);
std::cout << holland.get_id();
字符holland(holland_姓名,人类,男性);

您删除了一个对象,然后试图访问它。这是未定义的行为™ 任何事情都有可能发生,包括你的编撰者过来用棒球棒打你的头,你应该这么做

Character holland(holland_name, HUMAN, MALE);
std::cout << holland.get_id();
字符holland(holland_姓名,人类,男性);

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

 delete holland;
在这一行之后,你又在使用它。未定义的行为


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

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

 delete holland;
在这一行之后,你又在使用它。未定义的行为


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

Doh!谢谢。我仍然习惯于整个“内存管理”概念。这是当你来自C++的时候发生的事情。但是不要忘记C++中你有选择不使用新的。你可以声明一个字符变量而不用新的,那么你也不必删除。(你在C中有同样的事情吗?我不确定)@约翰:不,他们没有那样的东西。我反对删除holland;
!我妈妈住在那里。啊!谢谢。我还在习惯整个“内存管理”概念。这是当你来自C++的时候发生的事情。但是不要忘记C++中你有选择不使用新的。你可以声明一个字符变量而不用新的,那么你也不必删除。(你在C中有同样的事情吗?我不确定)@约翰:不,他们没有那样的东西。我反对删除holland;
!我妈妈住在那里。