Sudoku OOP errory – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Sudoku OOP errory – C / C++ – Fórum – Programujte.comSudoku OOP errory – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Task13370
Newbie
25. 8. 2015   #1
-
0
-

Dobrý deň.

Robím na jednoduchom Sudoku programe, avšak rád by som ho napísal pomocou OOP štýlu. Keď som mal všetky funkcie v jednej triede, program bežal bez problémov. Avšak akonáhle som pridal druhú triedu, kompilátor ukazuje chyby, ktoré k ničomu nevedú. Vždy ma len odkážu na deklaráciu objektu. Error log:

1>------ Build started: Project: Sudoku, Configuration: Debug Win32 ------
1>  tools.cpp
1>c:\users\marek\documents\visual studio 2013\projects\sudoku\sudoku\game.h(21): error C2146: syntax error : missing ';' before identifier 'tool'
1>c:\users\marek\documents\visual studio 2013\projects\sudoku\sudoku\game.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>  main.cpp
1>c:\users\marek\documents\visual studio 2013\projects\sudoku\sudoku\tools.h(12): error C2146: syntax error : missing ';' before identifier 'game'
1>c:\users\marek\documents\visual studio 2013\projects\sudoku\sudoku\tools.h(12): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>  game.cpp
1>c:\users\marek\documents\visual studio 2013\projects\sudoku\sudoku\tools.h(12): error C2146: syntax error : missing ';' before identifier 'game'
1>c:\users\marek\documents\visual studio 2013\projects\sudoku\sudoku\tools.h(12): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>  Generating Code...
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Nerozumiem, čo to môže spôsobovať, ale konieckoncov, som začiatočník.
Celé riešenie prikladám tu: http://www.filedropper.com/sudoku_1

Ďakujem za každú odpoveď.

Nahlásit jako SPAM
IP: 70.209.135.–
Happiness is when your code runs without error.
Reklama
Reklama
KIIV+42
God of flame
25. 8. 2015   #2
-
0
-

Minimalne tam mas cyklicke zavislosti. Game ma v sobe Tools, Tools ma v sobe Game, nejde pouzit neuplnou definici, protoze uz musi znat velikost a tak dale

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
ondrej39+1
Věrný člen
25. 8. 2015   #3
-
0
-

#1 Task1337
Mrkni se taky semhle a zjisti, v čem tvůj kód daný návrhový vzor porušuje.  

Nahlásit jako SPAM
IP: 78.156.159.–
Inject all the dependencies!
Task13370
Newbie
25. 8. 2015   #4
-
0
-

#2 KIIV
máš pravdu, bolo to tým. Objekty som dal ako odkazy a okrem toho som použil forward declaration na triedy. Teraz sa program skompiluje bez problémov, dokonca sa aj spustí intro obrazovka, problém nastnane pri normalizácii plochy. Pri debugovaní s dostanem na "game.WriteToBoard( 0,i );" a tam nastane "Acces Violation". Pri klasickom spustení program po zatiaľ neimplementovom výbere obtiažnosti zamrzne.

Pre jednoduchosť som vytvoril github projekt: Nová verzia je tu:

https://github.com/TheTask/test

Nahlásit jako SPAM
IP: 70.209.135.–
Happiness is when your code runs without error.
ondrej39+1
Věrný člen
25. 8. 2015   #5
-
0
-

#4 Task1337
Na co tam tu cyklickou závislost vůbec máš? Proč podle tebe potřebuje třída Tools vědět o třídě Game?

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
Task13370
Newbie
25. 8. 2015   #6
-
0
-

#5 ondrej39
Ide o to, že si chcem precvičiť program, kde je viac tried pokope. Tak som sa rozhodol, že program, čo majú na starosti kreslenie budú v inej triede ako samotná logika. Mal som to napísané všetko v jednej triede, fungovalo to bez problémov. Chcem ale vedieť, prečo to nejde teraz. 

Nahlásit jako SPAM
IP: 70.209.135.–
Happiness is when your code runs without error.
KIIV+42
God of flame
25. 8. 2015   #7
-
0
-

Souhlas s ondrej39 - tak, jak to je, na samostatnou tridu tools to urcite neni. Je to proste primo na metody do Game.

A ted k te chybe:

Tools::Tools()
	:
	game( game )
{}


Delas referenci samo na sebe, nic jineho nez neopravneny pristup do pameti bych ani necekal :)

Musis tu referenci predat konstruktoru z venku! Nebo pouzij pointer a vytvor novy objekt v konstruktoru.

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Řešení
KIIV+42
God of flame
25. 8. 2015   #8
-
0
-
Vyřešeno Nejlepší odpověď

Proste Tools, kdyz uz bys to tak chtel, by melo vypadat nejak takto:

#pragma once

class Game;

namespace Tools {

  void ShowBoard(Game & game); 
  void NormaliseBoard(Game & game); //Sets all values on board to 0
  void WipeConsole(); //because I don't want drawing new boards below each other on next move, I better wipe console and redraw

}
#include "tools.h"
#include "game.h"
namespace Tools {

void ShowBoard(Game & game)
{
	std::cout << "      1   2   3     4   5   6     7   8   9";

	std::cout << std::endl;
	std::cout << std::endl;
	std::cout << std::endl;
	
	for( unsigned short i = 1; i <= 9; i++ )
	{
		std::cout << i << "    ";
		for( unsigned short j = 1; j <= 9; j++ )
		{
			if( game.GetFromBoard( ( i - 1 ) * 9 + ( j  - 1 ) ) != 0 )
			{
				std::cout << " " << game.GetFromBoard( ( i - 1 ) * 9 + ( j - 1 ) ) << "  ";
			}
			else
			{
				std::cout << "___ ";
			}
			if( j % 3 == 0 && j != 9 )
			{
				std::cout << "| ";
			}
		}
		std::cout << std::endl;
		if( i % 3 == 0 && i != 9 )
			{
				std::cout << "     ---------------------------------------";
			}
		std::cout << std::endl;
	}
}

void NormaliseBoard(Game & game)
{
	for( unsigned short i = 0; i < 81; i++ )
	{
		game.WriteToBoard( 0,i ); //this line of code seems to cause error, game object seems not to be defined
	}
}

void Tools::WipeConsole()
{
	HANDLE hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
	COORD coord = { 0,0 };
	DWORD count;
	CONSOLE_SCREEN_BUFFER_INFO csbi;

	if( GetConsoleScreenBufferInfo( hStdOut,&csbi ) )
	{
		FillConsoleOutputCharacter( hStdOut,(TCHAR)32,csbi.dwSize.X * csbi.dwSize.Y,coord,&count );
		FillConsoleOutputAttribute( hStdOut,csbi.wAttributes,csbi.dwSize.X - 1* csbi.dwSize.Y - 1,coord,&count );
		SetConsoleCursorPosition( hStdOut,coord );
	}
	return;
}

} // namespace
Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Task13370
Newbie
25. 8. 2015   #9
-
0
-

A keď budem volať Tools::NormaliseBoard( Game& game ) vnútri triedy Game, čo mám dať ako argument do zátvoriek?

Nahlásit jako SPAM
IP: 70.209.135.–
Happiness is when your code runs without error.
KIIV+42
God of flame
25. 8. 2015   #10
-
+1
-
Zajímavé

Tools::NormaliseBoard(*this)

Samozrejme zrovna to normalise a showboard je vic na tridni metody Game nez samostatne, ale co uz :)

Nahlásit jako SPAM
IP: 94.113.92.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Task13370
Newbie
25. 8. 2015   #11
-
0
-

Ah, skúšal som len this, nie *this. Ďakujem pekne.

Nahlásit jako SPAM
IP: 70.209.135.–
Happiness is when your code runs without error.
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, 68 hostů

Podobná vlákna

Sudoku X — založil Epoxi

SuDoku v Jave — založil whatto

Sudoku backtraking — založil Oxydentist

VB Sudoku v konzoli — založil Vili

Diagonální sudoku II — založil Epoxi

Moderátoři diskuze

 

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