簡體   English   中英

我在C ++中的頭文件和實現文件有問題

[英]I am having issues with my header file and implementation file in c++

因此,我正在為游戲創建一個基本布局,我幾乎沒有從我的主文件中分離類並從中創建兩個新文件(實現文件,.h文件)的經驗。 我以某種方式弄亂了一些分離,我不知道到底是哪里出了錯。 我也很難弄清楚如何從我的主文件中的這兩個新文件創建對象。 例如,我將向您顯示ORIGINAL類,然后是.h,然后是.cpp。

******原始課程******

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文件的結尾*****

在將一個類分為兩個不同的文件之前,我的代碼運行相對平穩,因此我傾向於認為自己做錯了。 我的問題是:我做錯了什么? 以及如何在我的主類中從此類制作對象? 謝謝您的寶貴時間!

當您拆分標頭和cpp時,不要在標頭中保留任何定義,例如這些

void setName(string x){  
}

int setHealth (int health){
}

string getName(){
    return name;
}

應該

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

僅僅因為您清空了{}之間的所有代碼,最終要做的就是將這些函數定義為實際上不起作用。 然后,您嘗試再次在cpp文件中重新定義它們。

您在類中定義了兩次函數,這被視為兩個具有相同名稱,返回類型和參數的已定義函數,這是一個錯誤。

宣言:

type func_name(parameter_type , parameter_type);

定義:

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

您只需要聲明一次,然后為每個程序定義一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM