Recientemente me metí en la programación y decidí aprender C ++. Aproveché la venta en Udemy y compré tres cursos allí, uno para principiantes en C ++, uno para hacer juegos y otro para Blender.
Comencé a hacer el curso para principiantes, el profesor dijo que usaría Code :: Blocks pero que cualquier otro IDE estaría bien, así que descargué Visual Studio 2017 porque eso era lo que usaba el curso de creación de juegos. Pero cuando hago exactamente lo que dice el profesor (y escribe), el código no se compilará correctamente.
Aquí hay un ejemplo:
Lo que el profesor escribió y se puso a trabajar en su computadora
#include <iostream>
using namespace std;
main()
{
cout << "Hello world! :-)";
}
Lo que descubrí funcionaría después de buscar en Google
#include <pch.h>
#include <iostream>
using std::cout;
int main()
{
cout << "Hello world! :-)";
}
Y mi pregunta para quienes tienen experiencia es: ¿Cuál es la diferencia entre Code :: Blocks y Visual Studio 2017? ¿Qué es diferente en ese caso? ¿Podré usar este curso para aprender?
¡Gracias por adelantado!
editar: editado en un # faltante en el código del profesor
fuente
Respuestas:
#include <pch.h>
:Ver la respuesta de Gabriel.
include <iostream>
vs#include <iostream>
:El primero es simplemente incorrecto. Tiene que estar
#include
con el#
.using namespace std;
vsusing std::cout;
:Si bien ninguno de los dos es una práctica especialmente buena, ambos deberían hacer lo mismo aquí. Si no escribe ninguno de ellos, tendrá que escribir en
std::cout << ...
lugar de solocout << ...
: eso parece molesto, pero es algo a lo que debe acostumbrarse si finalmente desea ser un programador serio de C ++. Consulte también ¿Por qué "usar el espacio de nombres estándar" se considera una mala práctica? .main()
vsint main()
:Esto no es algo que Code :: Blocks debería permitir porque no es correcto C ++.
main
siempre debe devolverint
.En general, parece que ya ha encontrado un desafortunado número de diferencias entre entornos / compiladores en este ejemplo básico. Sin embargo, ni su curso ni VS2017 están mal hasta ahora, por lo que le recomiendo que siga usándolos. Si algo para lo que escribe su profesor no funcionará en un entorno diferente, probablemente sea una mala idea escribir ese tipo de código en primer lugar. Y cometieron varios errores en este simple ejemplo.
PD: Recomiendo encarecidamente habilitar las advertencias, porque pueden decirte cuándo haces algo mal de una manera más sutil. Hay muchos errores (del tipo "disparándose en el pie") que el compilador no está obligado a evitar que cometas, pero si pides que te detengan (prestando atención a las advertencias) te ayudará.
fuente
El uso de Visual Studio debería estar bien siempre que deshabilite los encabezados precompilados y su tutorial use código compatible con el estándar.
Acerca de los encabezados precompilados:
Visual Studio habilita encabezados precompilados de forma predeterminada en un programa de línea de comandos C ++. Esto significa que en su proyecto, por defecto, lo obligará a usar un encabezado precompilado en la primera línea de su código fuente (pch.h aquí). Al deshabilitarlos, casi * puede hacer que el primer fragmento funcione en VS. Para hacer esto, seleccione su proyecto, vaya al menú "Proyecto-> Propiedades", luego a la sección "Propiedades de configuración -> C / C ++ -> Encabezados precompilados", luego cambie la configuración "Encabezado precompilado" a "No usar precompilado" Opción de encabezados "(esto se aplica a VS 2012, aplicar esto a otras versiones de VS debería ser fácil).
Si desea evitar esto en el futuro, puede crear un proyecto vacío al configurar su proyecto en VS.
Ver también: http://msdn.microsoft.com/en-us/library/h9x39eaw%28v=vs.71%29.aspx , Cómo evitar encabezados precompilados
*: El primer fragmento no funcionará realmente ya que la declaración de main no es correcta C ++, solo C (consulte https://en.cppreference.com/w/cpp/language/main_function , ¿Cuál es la declaración de main adecuada? )
fuente
Para su pregunta real, VS estará bien para su curso, aunque todavía estoy desconcertado por la versión original de este código del profesor.
Sin embargo, es realmente útil tomarse el tiempo para comprender qué hicieron todos sus cambios y por qué solucionaron su problema. Tal vez ya hiciste esto, esa no es la impresión que obtuve de la frase
Si hackear el código tiene una solución, aún debe intentar entender por qué . Ahora puede ver lo que ha cambiado, ver el error original e intentar comprender por qué sus cambios lo arreglaron. Si realizó múltiples cambios, ¿fueron todos realmente necesarios? ¿Entiendes lo que hicieron todos y por qué?
Si hace esto, puede solucionar el siguiente problema relacionado más rápido , en lugar de pasar por todo el proceso de prueba y error nuevamente. Incluso puede escribir un código mejor que evite el problema en primer lugar.
Esta es la parte que en realidad constituye el aprendizaje, y es por eso que estoy tratando de abordarlo.
La solución importante fue cambiar las líneas.
a
porque los primeros no son legales en C ++. Si su profesor realmente escribió exactamente eso y de alguna manera no copió mal, entonces no tengo idea de por qué su ejemplo funcionó.
El material específico de Visual Studio es el encabezado precompilado, como se describe en la respuesta de Gabriel.
Pero el cambio restante es esencialmente cosmético. Sustitución:
con
No afecta nada en su código, y solo usa
(sin ninguno
using
) funcionaría igual de bien.fuente
use of undeclared identifier 'cout'
) que se buscó en Google en algún momento condujo a una respuesta similar a "olvidasteusing std::cout
". Me parece que el último párrafo innecesariamente condescendiente, sobre todo teniendo en cuenta lo que ya tenían logran corregir todos estos errores con no más de un cambio imprevisto.using
s eran equivalentes en el proceso de compilación del código (porque el cambio no cambió el mensaje de error), en ese momento es más simple dejarlo allí que revertirlo, y por qué desperdiciarlo ¿el esfuerzo si te quedan otros 3 mensajes de compilación de los que preocuparte? No creo que el regaño (eso es lo que me parece como un tercero no relacionado) sea apropiado aquí.