Jak provázat soubory, když chci využít třídu A pro objekt B a každá má vlastní soubory? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak provázat soubory, když chci využít třídu A pro objekt B a každá má vlastní soubory? – C / C++ – Fórum – Programujte.comJak provázat soubory, když chci využít třídu A pro objekt B a každá má vlastní soubory? – C / C++ – Fórum – Programujte.com

 

PazziCZ
~ Anonymní uživatel
2 příspěvky
1. 5. 2012   #1
-
0
-

Zdravím, 

ve zkratce: mám 2 třídy (Point a Ball), každá z nich má *.h a *.cpp soubor a v třídě Ball mám jako private objekt třídy Point. A zde nevím jak mezi sebou provázat hlavičkové soubory... Visual Studio mi hlásí chybu, že třída Point v ball.h není nadefinovaná... 

Za každou radu budu nesmírně vděčný, předem díky za odpovědi.

Takhle nějak vypadají jednotlivé soubory: 

pro lepší přehlednost v Pastebin: 

main.h http://pastebin.com/KSSqBeUB 

main.cpp http://pastebin.com/GdcKS2ZV 

point.h http://pastebin.com/hHaQLeqA 

point.cpp http://pastebin.com/dt5WfNJD

ball.h http://pastebin.com/7WLmDmeB

ball.cpp http://pastebin.com/FWJzma6J

main.h 

#pragma once

#include <allegro5\allegro.h>
#include <allegro5\allegro_primitives.h>
#include <allegro5\allegro_image.h>
#include <allegro5\allegro_font.h>
#include <allegro5\allegro_ttf.h>
#include <allegro5\color.h>

#include <stdio.h>
#include <fstream>
#include <vector>
#include <iostream>
#include <sstream>
#include <string>
#include <math.h>

#include "point.h"
#include "ball.h"

using namespace std;

/*
 ... nejake dalsi promenne ...
*/


class Point;
class Ball;

void InitBalls(vector<Ball> &b);
void CheckAndMove(Ball &player, vector<Ball> &balls);
void CollideObjects(Ball &player, vector<Ball> &balls);
void EatAFromB(Ball &a, Ball &); 
void EatBiggerFromSmaller(Ball &a, Ball &b);
int PointDistance(Point u, Point v);
Point ToPoint(double a, double b);
double RoundInterval(double x);

point.h

#pragma once
#include "main.h"

class Point
{
private:
    double x;
    double y;
public:
    Point();
    Point(double x, double y);

    double GetX();
    double GetY();
    void SetX(double a);
    void SetY(double a);
    double Length();
    Point SetPlus(Point a);
    Point SetMinus(Point a);
    Point SetDevide(double a);
    Point SetMultiply(double a);
    Point GetPlus(Point a);
    Point GetMinus(Point a);
    Point GetDevide(double a);
    Point GetMultiply(double a);
};

ball.h     // zde mi to hlásí "Ball::position, Ball::speed uses undefined class 'Point'"

#pragma once
#include "main.h"

class Point;

class Ball
{
private:
    int ID;
    double r;
    Point position;
    Point speed;
public:
    Ball();
    Ball(int i, Point p, Point s, int r);
    void Draw();
    void DrawInfo(int x, int y);
    void Reset();
    void Check();
    void Move();
    void Kill();

    void AddContent(double x);
    void AttributedSpeed(Point s);
    void SetSpeed(Point s);
    double SetR(double x);
    double ReduceR(double x);
    double GetR();
    Point GetSpeed();
    Point GetPosition();
    Point CalcDirection(int x, int y);
    Ball Fart(int x, int y);
    bool ISCollide(Ball b);
    bool Alive();
};

main.cpp

#include "main.h"

/*
... main a dalsi funkce z main.h
*/

point.cpp

#include "point.h"

/*
... metody z point.h ...
*/

ball.cpp

#include "ball.h"

/*
... metody z ball.h ...
*/
Nahlásit jako SPAM
IP: 158.196.57.–
fenry
~ Anonymní uživatel
24 příspěvků
1. 5. 2012   #2
-
0
-

Není nic snažšího, než v ball.h includnout point.h

Nahlásit jako SPAM
IP: 88.101.235.–
ingiraxo+15
Grafoman
1. 5. 2012   #3
-
0
-

Ono hlavně cpát všechny includy do jednoho a ten potom volat není zrovna nejšťastnější řešení...

A jak tak koukám, tak Ball využívá pouze Point, takže zde includnou Point a tam, kde se prvně použije Ball (čili main), tak tam includnout Ball

A tento guláš v main.h nechápu proč tam je..

void InitBalls(vector<Ball> &b);
void CheckAndMove(Ball &player, vector<Ball> &balls);
void CollideObjects(Ball &player, vector<Ball> &balls);
void EatAFromB(Ball &a, Ball &); 
void EatBiggerFromSmaller(Ball &a, Ball &b);
int PointDistance(Point u, Point v);
Point ToPoint(double a, double b);
double RoundInterval(double x);

většina tam nemá co dělat a měla by být v Ball, a ToPoint je zbytečná funkce, lze použít konstruktor Point

Spíš to celý předělej a pořádně se zamysli, kam to dáš a jestli je to opravdu potřeba, pokud máš základ v pořádku, je radost s tím pracovat

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
PazziCZ
~ Anonymní uživatel
2 příspěvky
1. 5. 2012   #4
-
0
-

To fenry:

To jsem samozřejmě udělal, ale VS mi hlásilo stále stejnou chybu. 

Top ingiraxo:

Jasně, bordel v tom mám. Právě proto se to teď snažím předělat, aby to vypadalo hezčeji. Programuju teprve rok, takže se ještě učím jak přehledně pracovat na nějakém větším projektu. 

Funkce ToPoint tam ještě zůstala z doby, kdy Point byla struktura, teď už to řeším přes konstruktor, ale zapomněl jsem ji smazat. 

Ty funkce v main.h tam mám, protože jsem nevěděl kam je strčit jinam. Prototypy funkcí využívajicí Ball (i ty s vektorama) mám tedy strčit do ball.h a definovat je v ball.cpp (nemám je strkat do třídy Ball). 

Díky moc, už mi to funguje.

Nahlásit jako SPAM
IP: 158.196.57.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 21 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý