Codeblocks int main以前在此定义

时间:2014-12-11 08:10:09

标签: c++ codeblocks redefinition

尝试在这里和devc ++中制作一个基本的RPG我得到了各种关于没有%的win文件错误。停止。

所以我切换到了代码块,现在甚至基础都不会编译。错误是这样的:

C:\Users\Elliott Pew\Desktop\rpg_final\6_days_to_escape\main.cpp|10|error: redefinition of 'bool running'|  C:\Users\Elliott Pew\Desktop\rpg_final\6_days_to_escape\main.cpp|24|error: redefinition of 'int main()'|C:\Users\Elliott Pew\Desktop\rpg_final\6_days_to_escape\main.cpp|24|error: 'int main()' previously defined here|

我不知道这意味着什么,并且几乎每种数据类型都在做它(我的数组ints bool等我不确定正确的verbage)我检查过没有其他主要功能(我确定我不会这样做毕竟这不是java)。我有一个头文件,我确保将它们添加到我的项目文件中。

继承我的源代码

的main.cpp

 //game rpg
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
#include "createcharacter.h"
using namespace std;

//is running check
bool running = 1;

//int healedHP(int x, int y);
//int attackedHP(int x, int y);

//user input var+
int userInput = 0;
int startChoices[4] = {0, 0, 0, 0};
string name;
//function declarations
void theStart();
void newGame();


int main (){

    cout << "Enter your name." << endl;
    cin >> name;
    cout << "Welcome " << name << "." << endl;
    cout << "Strike any key....if you dare......";
    getch();
    system("cls");

    theStart();
    cout << startChoices << endl;

    system("pause");
    return 0;
}
void theStart()
{
    cout << "\n\n";
    cout << "\t6 Days to Escape!\n"; //title
    cout << "\t\t  1: Play\n"; //main menu options. The first thing the user sees.
    cout << "\t\t\t  2: Exit\n";
    cin >> userInput;
    system("cls");
    if(userInput == 1)
    {
        // Create a new game
        newGame();
    }
    else
    {
        //bool then false causeing program to exit
        running = 0;
    }

    return;
}
void newGame(){
    // there are 4 addresses in this array for the following:
    //0. Difficulty
    //1. Class
    //2. Starting Wep
    //3. Boost not implimented yet TODO
    //enum class difficulty{simple, easy, hard, impossible};
    do{
        cout << "Choose Your difficulty: " << endl;
        cout << "\t1. Simple - Game practically plays itself." << endl;
        cout << "\t2. Easy - Not that easy." << endl;
        cout << "\t3. Hard - Zombies do more than crave flesh." << endl;
        cout << "\t4. Impossible - You will not make it." << endl;
        cin >> startChoices[0];
        cout << endl;
        system("cls");
        if(startChoices[0] < 1 || startChoices[0] > 4){
            cout << "Invalid Difficulty Choice. Try again." << endl;}
    }while(startChoices[0] < 1 || startChoices[0] > 4);

    do{
        cout << "Choose your class:" << endl;
        cout << "\t1. Lumber Jack - Stong, hard to kill, but slow." << endl;
        cout << "\t2. Doctor - Healer, weak but fast. Favors health." << endl;
        cout << "\t3. Theif - FAST, Cunning but weak attacks." << endl;
        cout << "\t4. Everydayer - Balenced everything." << endl;
        cin >> startChoices[1];
        cout << endl;
        system("cls");
        if(startChoices[1] < 1 || startChoices[1] > 4){
            cout << "Invalid Class Choice. Try again." << endl;}
    }while(startChoices[1] < 1 || startChoices[1] > 4);

    do{
        cout << "Choose your starting Weapon:" << endl;
        cout << "\t1. Axe" << endl;
        cout << "\t2. Crowbar" << endl;
        cout << "\t3. Swiss army knife" << endl;
        cout << "\t4. Ice pick" << endl;
        cin >> startChoices[2];
        cout << endl;
        if(startChoices[0] < 1 || startChoices[0] > 4){
            cout << "Invalid Weapon Choice. Try again." << endl;}
    }while(startChoices[2] < 1 || startChoices[2] > 4);
    }

createcharacter.h

#ifndef CREATECHARACTER_H
#define CREATECHARACTER_H
#include "main.cpp"
class CreateCharacter{
    public:
        //setter
        void setplayerHealth(int h){
            playerHealth = h;}
        void setplayerMaxHealth(int mh){
            playerMaxHealth = mh;}
        void setplayerStr(int s){
            playerStr = s;}
        void setplayerAgl(int a){
            playerAgl = a;}
        void setplayerInt(int i){
            playerInt = i;}
        void setplayerDifficulty(int d){
            playerDifficulty = d;}

        //getters
        int getHealth(){
            return playerHealth;
        }
        int getMaxHealth(){
            return playerMaxHealth;
        }
        int getStr(){
            return playerStr;
        }
        int getAgl(){
            return playerAgl;
        }
        int getInt(){
            return playerInt;
        }
        int getDifficulty(){
            return playerDifficulty;
        }



    private:
        int playerHealth;
        int playerMaxHealth; //absolute max = 200
        int playerStr; // absolute max = 20
        int playerAgl;// absolute max = 20
        int playerInt;// absolute max = 20
        int playerDifficulty; // absolute max = 4
};

#endif

我想补充一点,我知道我不会在main.cpp中强调这个类,但是我正在踩回来尝试让它运行至少。在我创建getter之前,所有内容都在devcpp中运行。

2 个答案:

答案 0 :(得分:1)

您还在头文件中包含main.cpp,导致函数main被定义两次。请记住,使用#include基本上是复制并粘贴整个文件。

#include "main.cpp" // "paste" the complete contents of the included file

cpp文件中会包含h文件。精细。但是,h文件包含cpp文件!这意味着当main.cpp解析超过#include时,其内容已经被解析过一次,并为您提供信息性编译错误。尝试用实际复制和粘贴内容替换#include,你会看到会发生什么。

通常,您希望将.h文件包含在.cpp文件中,而不是相反。实现需要知道你的课程,但不是相反。

在伪代码中,每个缩进级别代表一个文件:

// main.cpp
#include createcharacter.h
    // chreatecharacter.h
    has chreatecharacter been included? no! go on.
    #include main.cpp
        // main.cpp
        #include createcharacter.h
            // createcharacter.h
            has createcharacter been included? yes! stop.
        define main
    define createcharacter
define main // <-- oops

答案 1 :(得分:1)

这里发生的是main.cpp你有:

#include "createcharacter.h"

包含您的类定义。但是,在createcharacter.h中,您有

#include "main.cpp"

包括cpp文件坦率地说是非标准的,通常是某个地方出现错误的迹象。由于main.cpp没有包含在包含保护中,因此预处理器再次粘贴完整的代码文件,这会导致main.cpp中的所有符号被定义两次,这会导致您看到的错误。

在嵌套的main.cpp中,您再次包含createcharacter.h,但这是一个空扩展,因为标头中的包含保护会阻止预处理器再次包含代码。

你需要记住的是预处理器(包括#include指令)只进行文本替换,然后编译其结果。

只是为了澄清你看到这些错误的原因。