Ayuda con código c++ en Debian

Buenas tardes. Como podreis observar por el codigo que os voy a poner no llevo mucho tiempo en esto, pero tengo un problema y es que no me funciona este codigo, cuando en teoría no debería dar ningún error (me he encabezonado). ¿Alguien sabe que esta mal?

El compilador de g++ me da este error: cannot convert `std::string' to `const char*' for
argument `1' to `int mkdir(const char*, unsigned int)
y este: No existe el fichero o el directorio


/* programa en C (llamado "nuevo-dir.c") que realiza lo siguiente:

-lee un nombre por teclado

-crea un directorio con el nombre leido

(utilizando la funcion "mkdir") */

/* Necesario para E/S (cout) */
#include
using namespace std;

#include


/* necesario para manejar directorios (getcwd,chdir) */

#include
#include
#include

string nom_dir(void) {
string dir;
cout<<"Introduce el nombre del directorio que desea crear: \n";
cin>>dir;
return (dir);
}

main() {
string nom;
nom = nom_dir();
mkdir(nom, 0);
// mkdir("patata", 0);

return 0;
}
Seguramente en "software libre" te podran ayudar mas.

Pide q te muevan el hilo.
Ups, lo siento, es la primera vez que pregunto sobre programación y no sabía que foro sería el mas adecuado.
El mismo error te lo dice, no se puede convertir del objeto string a un puntero que es lo que recibe mkdir.

Lo mejor es que devuelvas desde el objeto el puntero con nom.c_str();
Diria que te lo han movido por el programando en debian mas que por el c++ o porque por aqui seguramente lo tengamos mas por la mano (lo mas curioso es sque yo hace siglos que no toco c pero bueno).

Vale, a este codigo le veo dos cosas:

El "#include " a mi no me va, lo curioso es que si lo comentas funciona el programa perfectamente. Supongo que funciona porque los strings estan en la STD pero yo aviso. Deberia de ser "#include " creo. Ese es el error que da esto en compilacion.
prueba2.cpp:5:20: error: iostring: No existe el fichero o el directorio


Y el otro error que da (en mi ordenador es este):
prueba2.cpp: In function ‘int main()’:
prueba2.cpp:28: error: no se puede convertir ‘std::string’ a ‘const char*’ para el argumento ‘1’ para ‘int mkdir(const char*, __mode_t)’


Basicamente lo que dice es que la funcion mkdir tiene como parametro un const char* (un array de caracteres) y que el compilador no sabe como convertir de string a eso (el otro parametro es opcional).

Simplemente has de hacer la conversion a mano, la clase string tiene una funcion para ello que se llama c_str(). Es decir ha de quedar asi la linea del mkdir:

mkdir(nom.c_str(), 0);


O hacer la conversion en una variable antes, da igual.

Saludos
Muchísimas gracias a los dos, ya funciona el "programa". Tocará practicar mas porque no tenia ni guarra de como podía solucionarlo.
Sería interesante que leyeras libros de verdad sobre C++ si vas a hacer cosas reales con C++. Lo digo por el 'using namespace std', entre otras cosas.

Algunos libros de verdad:

The C++ Programming Language - Bjarne Stroustrup
Effective C++ - Scott Meyers
More Effective C++ - Scott Meyers
Effective STL - Scott Meyers

- ferdy
Si te vas a dedicar al c++, te recomiendo que busques algo de programacion orientada a objetos, ya que es lo caracteristico de c++

Inlcuos para empezar hay un manual por internet que se llama "aprenda c++ como si estuvieras en primero"

Repito, es lo basico, porque lo libros que han citado arriba son mucho mejores... ni punto de comparacion xD
7 respuestas