2013-11-10, 21:35
  #1
Medlem
Hej!

Har stött på ett problem här när jag försöker länka mina klasser. Jag har gjort det förut och jag har ungefär samma syntax som i min andra fil men det blir massa error, vilket gör mig galen. Inkluderar jag "lottorow.h" i lottoCoupon.h och "LottoCoupon.h" i LottoRow.h får jag error "Includes itself". Tar jag bort det så får jag felmeddelande när jag försöker använda mig utav en variabel i LottoCoupon i LottoRow. Sätter jag däremot dit båda includes:en så funkar det perfekt, men då vägrar den kompilera för att den inkluderar sig själv?

LottoCoupon.h
Kod:
#ifndef LOTTO_COUPON_H
#define LOTTO_COUPON_H

class LottoCoupon
{
private:
	LottoRow myRows[];
	static const int maxNrOfRows = 10;

public:
	LottoCoupon();
	~LottoCoupon();
	
	bool tip(int rowNr, int nr);
	int getNrOfMarked(int rowNr);
	int nrOfEqualNumbers(LottoRow theRow, int rowNr);
	void showRow(int rowNr);
	int getNrOfCompletedRows()const;
	string toString()const;


};

#endif

LottoRow.h
Kod:
#ifndef LOTTO_ROW_H
#define LOTTO_ROW_H
#include <string>
#include <ctime>
using namespace std;

class LottoRow
{
private:
	static bool row[];
	int nrOfMarked;
	static const int totalNrOnRow = 7;
	static const int minValue = 1;
	static const int maxValue = 35;

public:
	LottoRow();
	~LottoRow();
	bool tip(int nr);
	int nrOfEqualNumbers(LottoRow theRow);
	
	void showRow()const;
	int getNrOfMarked()const;
	string toString()const;

};

#endif

LottoRow.cpp (Har inkluderat både lottoRow.h och lottoCoupon.h
Kod:
bool LottoRow :: tip(int theNr)
{

	bool check = false;

	if(nrOfMarked > 0)
	{
		for(int i = 0; i < nrOfMarked; i++)
		{
			
			if(myRows[i] = theNr) // Felmeddelande
			{

				check = true;

			}

		}

	}
	
	if(check == false)
	{

		myRows[nrOfMarked] = theNr; //"Undefined" (utan #include i .h filerna)
		nrOfMarked++;

	}

	return check;

}
__________________
Senast redigerad av qpB 2013-11-10 kl. 21:45.
Citera
2013-11-10, 21:38
  #2
Medlem
E: NVM, Det kom tillbaka
Citera
2013-11-11, 12:44
  #3
Medlem
skyflashs avatar
Eftersom LottoCoupon har LottoRow som medlemsvariabel bör du inkludera LottoRow.h i LottoCoupon.h. Dock skall LottoRow.h ej inkludera LottoCoupon.h då inget i LottoRow-deklarationen refererar till LottoCoupon. Skulle så ha varit fallet så har man ett cirkelberoende, och det måste lösas på något annat sätt.

I LottoRow.cpp kan du sedan inte använda myRows, som ju är en medlemsvariabel i LottoCoupon och inte i LottoRow, på det sätt du försöker. Det finns ingen koppling från LottoRow till någon instans av LottoCoupon.

Det finns även andra fel, bla gissar jag att if(myRows[i] = theNr) borde använda jämförelseoperator == istället för tilldelning.
Citera
2013-11-11, 19:34
  #4
Medlem
Nae, det skall inte vara jämförelseoperatorn, då array plats [i] skall få värdet av "tip nr".

Kod:
	bool tip(int nr);
Detta skall väl användaren ha för att "tippa" på sin rad? Och då måste myRows användas? Deras klassdiagram är sjukt fail, väldigt dåligt uppbyggt och vissa grejer är helt fel, t.ex. hur kan en bool array fyllas med integer-värden? Det går ju inte.
__________________
Senast redigerad av qpB 2013-11-11 kl. 20:31.
Citera
2013-11-13, 18:58
  #5
Medlem
Ta och googla på cirkulära beroenden. Det där kan vara lite drygt i början men
det finns tutorials
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in