Duda estupida c++ en ubuntu

Betrayal

Pues bueno, el caso es que acabo de empezar con c++ en la facultad, y en la primera practica, que es hacer una tonteria de unos dados que tomen numeros aleatorios e imprimirlos por pantalla, me lleva dando toda la mañana fallos al compilar, y estoy ya desesperado por que no se que coño pasa, creo que el problema está en el tema de las librerias, pero tengo todo bien instalado en ubuntu (o eso creo)

El archivo principal del programa es este:

#include <iostream>
#include "dados.h"

using namespace std;
using namespace clases;

int main (int argc, char **argv)
{
Dados Ejemplo;

Ejemplo.lanzamiento(Ejemplo);
Ejemplo.dado1(Ejemplo);
Ejemplo.dado2(Ejemplo);

return 0;

}

el archivo donde estan las funciones es este:

#include <ctime>
#include "dados.h"

namespace clases
{

Dados::Dados()
{
	_dado1 = 0;
	_dado2 = 0;
}

Dados Dados::lanzamiento(Dados clase)
{
	srand(time(NULL));		
	clase._dado1 = rand()%(6+1);
	clase._dado2 = rand()%(6+1);	
	return clase;	
}


void Dados::dado1(Dados clase)
{
	cout<<clase._dado1<< endl;
}


void  Dados::dado2(Dados clase)
{
	cout<<clase._dado2<<endl;
}	

}

Y el archivo .h es este:

#ifndef dados_h
#define dados_h

namespace clases
{
class Dados
{
public:

		//Constructores:
		Dados();

		//Funciones:
		Dados lanzamiento (Dados clase);
		void dado1(Dados clase);
		void dado2(Dados clase);

	private:

		int _dado1;
		int _dado2;
};	

}

#endif

Al compilar el error que me da es este:

g++ -I. -g juego.cpp dados.cpp -o juego.exe
dados.cpp: In member function ‘clases::Dados clases::Dados::lanzamiento(clases::Dados)’:
dados.cpp:15: error: ‘srand’ no se declaró en este ámbito
dados.cpp:16: error: ‘rand’ no se declaró en este ámbito
dados.cpp: In member function ‘void clases::Dados::dado1(clases::Dados)’:
dados.cpp:24: error: ‘cout’ no se declaró en este ámbito
dados.cpp:24: error: ‘endl’ no se declaró en este ámbito
dados.cpp: In member function ‘void clases::Dados::dado2(clases::Dados)’:
dados.cpp:30: error: ‘cout’ no se declaró en este ámbito
dados.cpp:30: error: ‘endl’ no se declaró en este ámbito
make: *** [compilar] Error 1

  • Es como si no puidera usar no srand, ni rand ni cout, aunque tanto iostream como ctime estan incluidas e instaladas (he instalado todo con build-essentials.

AYUDA POR FAVOR !!!

doogie780

Bienvenido a: http://www.mediavida.com/foro/9

Betrayal

sorry creia q iba aqui

B

void Dados::dado1(Dados clase)
{
cout<<clase._dado1<< endl;
}

usas cout sin haber incluido <iostream> en ese fichero

y la funcion rand y srand esta en stdlib

Get

intentado compilar algo para windows sin sus librerias?
yo no tengo ni zorra de c , no sabia q se podia compilar exes en linux ...

Betrayal

Cree un nuevo tema donde correspondia, al final ya lo he solucionado, el problema era que tenia que meter los include en el .h para que evitar lo de los cout, y meter en el .h el #include <cstdlib>, para el tema del srand y el rand

Se nota que llevaba la tira de tiempo sin hacer nada de progamacion, no me acordaba de las cosas mas basicas :P a ver si le echo horas y me pongo al dia.

#5 Lo estoy haciendo en linux, y si que se pueden hacer .exe en linux :S de todas formas en el otro post me dijeron que le quitara el .exe al binario al compilar y eso he hecho.

dagavi

#5 El ".exe" no es más que parte del nombre del archivo, como si le da por poner "prog.ejecutable" o simplemente "prog"

Get

osease, es parte del nombre no un ".exe" real como windows, ya me estaba liando yo.

las veces q he tenido q compilar algunas aplicaciones, no recuerdo haberle puesto ninguna "extension" entre comillas.

-o miprogramita

y luego: ./miprogramita.

Usuarios habituales