me faltan argumentos pero no se cuales

Estado
Cerrado para nuevas respuestas
#1
pues eso, en el siguiente codigo en c++ segun el error de g++ me faltan argumentos.

Insertar CODE, HTML o PHP:
#include <iostream>

#include <QApplication>

#include <QPushButton>

using namespace std;

// abre una ventana(la funcion incorrecto hace lo mismo)

int correcto(int argc, char *argv[]){

	QApplication app(argc, argv);

	QPushButton hello("YES!");

	hello.resize(100, 30);

	hello.show();

	return app.exec();

}

int incorrecto(int argc, char *argv[]){

	QApplication app(argc, argv);

	QPushButton hello("NO!");

	hello.resize(100, 30);

	hello.show();

	return app.exec();

}

//aquí no defino los argumentos int... y char... ya que al hacer una aplicacion gui como main debo ponerlos en main.¿hay algo que no entienda?(como //que en ese caso se les darian unos valores especificos, etc..

int main() {

	string y = "uops";

	cout << "Respondeme yes: " << endl;

	cin >> y;

	if (y == "yes") {

  correcto();

	}

	else {

  incorrecto();

	}

	return 0;

}
al menos eso deduzco del siguiente error:

Insertar CODE, HTML o PHP:
main.cpp: In function ‘int main()’:

main.cpp:5: error: muy pocos argumentos para function ‘int correcto(int, char**)’

main.cpp:25: error: en este punto en el fichero

main.cpp:12: error: muy pocos argumentos para function ‘int incorrecto(int, char**)’

main.cpp:28: error: en este punto en el fichero

make: *** [main.o] Error 1
EDITO: he comprobado que si las funciones las meto dentro del if funciona, ¿que razón hay para ello?

Insertar CODE, HTML o PHP:
#include <iostream>

#include <QApplication>

#include <QPushButton>

using namespace std;

int main(int argc, char *argv[]) {

	string y = "Qt";

	cout << "Dime yes: " << endl;

	cin >> y;

	if (y == "yes"){

  QApplication app(argc, argv);

  QPushButton hello("YES");

  hello.resize(100, 30);

  hello.show();

  return app.exec();

	}

	else {

  QApplication app(argc, argv);

  QPushButton hello("NO");

  hello.resize(100, 30);

  hello.show();

  return app.exec();

	}

}
PD: no se porque en el code las tabulaciones aparecen tan pequeñas.
 

rob1104

Super Moderador
Super Moderador
#2
Lo que pasa es que al llamar a la funcion la estas mandando llamar sin argumentos, no entiendo porque declaras a las funciones correcto e incorrecto con: (int argc, char *argv[]) si después las mandas llamar y no les pasas ningún argumento, recuerda que esos argumentos son parametros de la linea de comandos. argc = contiene el número de argumentos recibidos por el programa, debemos considerar que siempre será el número de argumentos pasados más 1, ya que el primer agumento se reserva para contener el nombre del programa. Y argv es un apuntador a un array de chars que contiene los parámetros pasados en el mismo orden en que fueron escritos. Lo que puedes hacer es que en la funcion main cuando mandas llamar a correcto() e incorrecto le pases los argumentos que sinceramente no se como puedan ser ya que nunca he programado con la libreria QT (creo yo que es esa), pero seria algo como esto:

Insertar CODE, HTML o PHP:
if (y == "yes") {

 correcto(1);

}

else {

 incorrecto(1);

}
Saludos
 
#3
si a main() le añado int argc y char *argv[]

y a las fnciones correcto e incorecto les añado argc, argv el programa se compila sin problemas tanto en Windows como en linux, sin embargo, a la hora de ejecutarse en linux finciona bien, pero en Windows no realiza nada por consola y directamente ejecuta la función incorrecto(lo ejecuto desde la consola en Windows tambien)
 

niber

Nuevo Miembro
Miembro
#4
Hola!!

No nos has dicho si te deja teclear la respuesta, sino te deja teclear la respuesta, prueba a poner :

Insertar CODE, HTML o PHP:
cin>>y;

cin.ignore();//Para limpiar el stream
De todas formas para leer cadenas el cin>> te puede dar algún problemillacomo por ej para leer mas de una palabra "Jose Antonio", solo te leeria hasta el primer espacio en blanco "Jose", para solucionar esto puedes usar cin.getline(nombre_varible,tamaño_cadena);

Espero que te sirva. Saludos.
 
#5
no es que no me deje escribir, es que no da tiempo, lo que le tengo que poner es solo una palabra y lo que me extraña es que dependendo del sistema operativo cambie(en Windows uso gcc 3.4 y en linux gcc 4, pero no debería cambiar tanto no?
 

niber

Nuevo Miembro
Miembro
#6
A mi algúna vez también me ha pasado que no me da tiempo a escribir la respuesta (por culpa del buffer stream), y poniendo cin.ignore(); funciona es como si esperase que pulsaras el intro.

Yo de todas formas usaba windos con el Borland c++, así que no se porque cambia de un sistema operativo a otro

Pruebalo y ya me contaras.
 
Estado
Cerrado para nuevas respuestas
Arriba Pie