我在c ++中遇到了头文件和实现文件的问题

时间:2017-02-02 17:35:18

标签: c++

所以我正在为游戏创建一个基本布局,我很少有从主文件中分离类并从中创建两个新文件的经验(实现文件,.h文件)。我不知何故搞砸了一些分离,我无法弄清楚到底哪里出错了。我也无法弄清楚如何从我的主要文件中的这两个新文件创建一个对象。例如,我将向您展示ORIGINAL类,然后是我的.h然后是我的.cpp。

****** ORIGINAL CLASS ******

class Character{

public:
    string name;
    int health;

    Character(){
        setName("Unknown Caster");
        setHealth(20);
    }
    Character(string name, int health){
        setName(name);
        setHealth(health);
    }
    void setName(string x){
        cout << "What is your name?" << endl;
        cin >> x;
        name = x;  
    }
    int setHealth (int health){
        if(health < 0){
            health = 0;
        }
        this-> health = health;
        return health;
    }
    string getName(){
        return name;
    }
};

*****原始类结束*****

*****开始.h文件*****

#ifndef Character_h
#define Character_h
using namespace std;

class Character{

public:
    string name;
    int health;

    Character();///default constructor

    Character(string name, int health);

    void setName(string x){  
    }

    int setHealth (int health){
    }

    string getName(){
        return name;
    }
};

#endif

*****结束.h文件*****

*****开始.cpp文件*****

#include <iostream>
#include <string>
#include "Character.h"


Character::Character(){
    setName("unknown caster");
    setHealth(20);
    }

Character::Character(){
    setName(name);
    setHealth(health);
    }
void Character::setName(){
    cout << "What is your name?" << endl;
    cin >> x;
    name = x;
}

int Character::setHealth(){
    if(health < 0){
        health = 0;
    }
    this-> health = health;
        return health;
}
string Character::getName(){
    return name;
}

****结束.cpp文件*****

在将一个类分成两个不同的文件之前,我的代码运行相对顺利,所以我倾向于认为我做错了。我的问题是:我做错了什么?以及如何在我的主要课程中从这个课程中创​​建一个对象?感谢您提前的时间!

2 个答案:

答案 0 :(得分:2)

当你拆分标题和cpp时,不要在标题中留下任何定义,例如这些

void setName(string x){  
}

int setHealth (int health){
}

string getName(){
    return name;
}

应该是

void setName(string x);
int setHealth (int health);
string getName();

只是因为你清空了{}之间的所有代码,你最终做的是定义这些函数基本上没有用。然后你试图在cpp文件中再次重新定义

答案 1 :(得分:0)

您在类中定义了两次函数,它们被视为两个具有相同名称,返回类型和参数的已定义函数,这是一个错误。

声明:

type func_name(parameter_type , parameter_type);

定义:

type func_name(parameter_type name, parameter_type name2) {
    //code
}

您想要声明一次并为每个程序定义一次。