PDA

Visualizza la versione completa : [C++] Errore nell'uso della funzione GotoXY()


clone_xf2
09-11-2011, 21:17
Salve, vorrei sapere perchè il compilatore mi da il seguente errore quando compilo il seguente programma:

#include <iostream>
#include <conio.h>
#include <conio2.h>
using namespace std;
main ()
{
void gotoxy(int x,int y);
gotoxy(5,5);
cout<<"ciao"<<endl;
system("pause");
}


Compilatore: Default compiler
Esecuzione di g++.exe...
g++.exe "C:\Users\misterkiwi\Desktop\SenzaTitolo1.cpp" -o "C:\Users\misterkiwi\Desktop\SenzaTitolo1.exe" -g3 -I"C:\Programmi\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Programmi\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Programmi\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Programmi\Dev-Cpp\include\c++\3.4.2" -I"C:\Programmi\Dev-Cpp\include" -L"C:\Programmi\Dev-Cpp\lib" -g3
C:\Users\MISTER~1\AppData\Local\Temp/ccCccaaa.o(.text+0x13a): In function `main':
C:/Users/misterkiwi/Desktop/SenzaTitolo1.cpp:8: undefined reference to `gotoxy(int, int)'
collect2: ld returned 1 exit status

Esecuzione terminata



evidentemente si tratta di gotoxy ma perchè non va? vedo molti programmi su cui funziona..

oregon
09-11-2011, 21:39
gotoxy è una vecchissima funzione dell'ambiente/compilatore Borland, non dei DevC++.

O usi una vecchia versione di Borland o, meglio, utilizzi le API di Windows appositamente previste per la gestione della Console.

E, ancora meglio, evita di usare DevC++ e lavora con Visual Studio C++.

ESSE-EFFE
10-11-2011, 13:31
Originariamente inviato da clone_xf2
void gotoxy(int x,int y);


Prima di tutto proverei a togliere la riga che ho quotato... poi se ancora non funziona approfondiamo il discorso.

clone_xf2
10-11-2011, 14:40
mm non non funziona.....

Compilatore: Default compiler
Esecuzione di g++.exe...
g++.exe "C:\Dev-Cpp\SenzaTitolo1.cpp" -o "C:\Dev-Cpp\SenzaTitolo1.exe" -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"
C:\DOCUME~1\SONIA~1.FAM\IMPOST~1\Temp/ccUlaaaa.o(.text+0x13a):SenzaTitolo1.cpp: undefined reference to `gotoxy'
collect2: ld returned 1 exit status

Esecuzione terminata

ESSE-EFFE
10-11-2011, 15:04
Come avrai notato, per usare gotoxy con DevC++ devi includere conio2.h. Ma non basta, devi dire al linker di includere (linkare) la libreria che contiene l'implementazione aggiungendo l'opzione corretta (che credo sia -lconio).

oregon
10-11-2011, 15:05
Confermo la mia risposta (specialmente la parte riguardante le API di gestione Console).

clone_xf2
10-11-2011, 15:18
Originariamente inviato da oregon
Confermo la mia risposta (specialmente la parte riguardante le API di gestione Console).

ho provato a guardare solo che la funzione gotoxy sembra essere estremamente più semplice di quelle che tu mi consigli...



ESSE-EFFE

#include <iostream>
#include <conio.h>
#include <conio2.h>
using namespace std;
main ()
{

gotoxy(5,5);
cout<<"ciao"<<endl;
system("pause");
}

includo già conio2.h e ad opzioni compilatore avevo già aggiunto -lconio...

ESSE-EFFE
10-11-2011, 15:32
Originariamente inviato da clone_xf2
includo già conio2.h e ad opzioni compilatore avevo già aggiunto -lconio...

Allora non saprei (però stiamo parlando di opzioni di linking, non di compilazione). Se ti può essere d'aiuto: http://it.answers.yahoo.com/question/index?qid=20081206104847AAAR7ZV

Comunque se sei in ambiente Windows (e limitatamente a quello) anche usare le API non è che sia molto complicato, esempio: http://www.cplusplus.com/forum/beginner/4234/

clone_xf2
17-11-2011, 22:32
ok ho provato a fare come avete detto con le API.
ho scritto questa sorgente(funzionante):


#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <iostream>
using namespace std;

void gotoxy( int column, int line )
{
COORD coord;
coord.X = column;
coord.Y = line;
SetConsoleCursorPosition(
GetStdHandle( STD_OUTPUT_HANDLE ),
coord
);
}

int wherex()
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
COORD result;
if (!GetConsoleScreenBufferInfo(
GetStdHandle( STD_OUTPUT_HANDLE ),
&csbi
))
return -1;
return result.X;
}

int wherey()
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
COORD result;
if (!GetConsoleScreenBufferInfo(
GetStdHandle( STD_OUTPUT_HANDLE ),
&csbi
))
return -1;
return result.Y;
}

main()
{
system("title prova gotoxy");
system("color 0a");
string array[10]={"a","b","C","D","+","#","?","!","2","X"};
int x,y,a;
srand(time(NULL));
x=rand()%5;
y=rand()%5;

for(int i=1;i<=1000;i++)
{
a=rand()%10;
x=rand()%30;
y=rand()%30;
gotoxy(x,y);
cout<<array[a];

gotoxy(x,y);


getch();
}
}


praticamente stampa caratteri a caso sullo schermo premendo un tasto...
solamente che non occupa tutta la console. perche?

immagine (http://img221.imageshack.us/img221/395/93172cd1d2b944058c55371.png)

vedete? non occupa tutta la finestra..

oregon
17-11-2011, 23:09
Beh, ovvio ... se indichi

x=rand()%30;
y=rand()%30;

vuol dire che le coordinate che possono essere generate sono limitate a 30 righe e 30 colonne mentre nella finestra c'è un numero diverso di righe/colonne.

Come mai hai scritto 30 in quelle due righe ?

Loading