C ++ с использованием объекта класса в качестве члена класса - PullRequest
0 голосов
/ 28 февраля 2020

"clude.h" - это файл заголовка, в который я поместил все свои файлы заголовков и пространства имен.

hit_box.h

#include "cludes.h"
class hit_box{
    friend class player;
private:
    /*class members*/
public:
    // without this I get "no default constructor" error. 
    hit_box(); 
    //I think having two constructors will create problems but that's a problem on top of my current problem 

    hit_box(char typ, int t, int x, int y, float Px, float Py,int pw, float spotx, float spoty);
}

player .h

    #pragma once
#include "cludes.h"

class player {
public:
    enum states { falling, hurt, landed, jumping };
    player(float a, float b, int f, sf::Texture t, sf::Texture t2, hit_box pnch);
private:
    //other class members
    hit_box punch;
}

игрок. cpp

#include "player.h"
#include "cludes.h"
player::player(float a, float b, int f, sf::Texture t, sf::Texture t2, hit_box pnch){
    /*other class members*/
    hit_box punch = pnch;
}

Я хочу, чтобы hit_box был участником, которого я могу вызвать в классе игрока функции. это сообщения об ошибках, которые я получаю

Error C2061    syntax error: identifier 'hit_box' 
Error C3646    'punch': unknown override specifier
Error C4430    missing type specifier - int assumed. Note: C++ does not support default-int

Я пытался унаследовать класс hit_box от

player.h

#include "cludes.h"
class player {
    hit_box punch;
public:
player(float a, float b, int f, sf::Texture t, sf::Texture t2);
}

player. cpp

#include "player.h"
#include "cludes.h"
player::player(float a, float b, int f, sf::Texture t, sf::Texture t2) : punch('!', 10, 30, 64, -10, -10, 20, 4.44, 4.44){
//other class members
}

нет конструктора по умолчанию hit_box, таким образом, это не конструктор по умолчанию. независимо от того, что я все еще получаю

Error C3646    'punch': unknown override specifier
Error C4430    missing type specifier - int assumed. Note: C++ does not support default-int

Я использую sfml, если это важная информация.

1 Ответ

0 голосов
/ 28 февраля 2020

У вас есть hit_box, определенный в hit_box.h, но ни один из ваших файлов, которые его используют #include <hit_box.h>. Компилятор не знает, что такое hit_box при компиляции этого кода.

Добавьте в свой файл player.h

#include "cludes.h"
#include "hit_box.h"
class player {

"'clude.h" - файл заголовка I поместите все мои заголовочные файлы и пространства имен. "

Если clude.h #includes ваши другие заголовочные файлы, у вас есть циклические зависимости, и вам нужно forward forward.

...