C/Visual C - Pequeña duda sobre objetos :)

 
Vista:
sin imagen de perfil
Val: 7
Ha aumentado su posición en 10 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pequeña duda sobre objetos :)

Publicado por Marc (4 intervenciones) el 26/07/2019 22:43:47
Buenas a todos y todas.


Soy principiante en C++ y tengo una pregunta,

Puedo instanciar un objeto desde una libreria?
Es decir, tengo una libreria.h con una clase declarada, luego en un archivo.cpp con la libreria #incluida, instancio el objeto 'class1 obj'. Pero el compilador me dice que no existe 'obj'.
No entiendo muy bien el por qué.


Gracias :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pequeña duda sobre objetos :)

Publicado por Rodrigo (119 intervenciones) el 27/07/2019 16:15:23
Parece bien, para ayudarte mejor:
- Borra o comenta todas las lineas que no sean relevantes (para descubrir por que no te compila esto)
- Copia y pega aqui ese programa minimo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha aumentado su posición en 10 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pequeña duda sobre objetos :)

Publicado por Marc (4 intervenciones) el 28/07/2019 00:23:05
Buenas, me refería a algo así:

MAIN:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include "Lib01.h"
using namespace std;
 
int main() {
	int num;
	cin >> num;
 
	bot01.setNum(num);
 
	cout << endl;
	cout << "Bot num: " << bot01.getNum();
 
	return 0;
}
 
 
 
AUX:
 
#include "Lib01.h"
 
Bot bot01;
 
Bot::Bot() { num = 0; }
 
void Bot::setNum(int numIn) {
 
	num = numIn;
}
 
int Bot::getNum() {
 
	return num;
}
 
 
archivo .h:
 
 
#pragma once
 
class Bot
{
public:
	Bot();
	void setNum(int);
	int getNum();
private:
	int num;
};
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pequeña duda sobre objetos :)

Publicado por Rodrigo (119 intervenciones) el 29/07/2019 15:44:10
En que linea marca el error y cual es el mensaje?
(Sin interpretarlo, literalmente, cual es el mensaje que aparece?)

Si solo quieres tener 1 objeto de esa clase, por que no hacer in metodo static que lo crea si no existe y lo devuelva? (Un Singleton)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha aumentado su posición en 10 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pequeña duda sobre objetos :)

Publicado por Marc (4 intervenciones) el 29/07/2019 22:31:33
Buenas Rodrigo.
Uso Visual Studio.

Me dice literalmente si creo el objeto desde el .h :

Error LNK2005 ya se defini¾ "class Bot bot01" (?bot01@@3VBot@@A) en Lib01.obj LWP VisualProjects\LWP\main.obj

si lo creo desde el lib01.cpp me dice que en el main:


Error C2065 'bot01': identificador no declarado LWP \Desktop\VisualProjects\LWP\main.cpp

Solo puedo crear objetos desde el archivo main.


Mi pregunta viene a ser: ¿Puedo instanciar objetos desde una libreria o un archivo aparte?

Disculpa pero estoy hecho un lio con este tema. Solo quiero hacerme una libreria con mis objetos ya creados para poderlos usar en la función principal.

Decias: Si solo quieres tener 1 objeto de esa clase, por que no hacer in metodo static que lo crea si no existe y lo devuelva? (Un Singleton)

no, quiero poder crear más de uno. A lo que me surje otra pregunta(y disculpa si voy a decir una tontada..)

Todos los objetos se tienen que crear durante la escritura del código? Como se puede hacer que los objetos se creen a petición del usuario?


Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 350
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pequeña duda sobre objetos :)

Publicado por Rodrigo (119 intervenciones) el 30/07/2019 17:54:42
Dices que quieres crear mas de 1 objeto, pero parece molestarte tener que crear un objeto en el main y Al mismo tiempo quieres tener los objetos creados desde antes, o desde otro lado que no sea el main.

Todo lo que dices querer se puede hacer, pero decidete que es lo que quieres.

Por que, si quieres crear varios objetos no los creas.cada vez que los necesitas?
No es necesario que sea el.main, cualquiera que incluya la definicion va a poder instanciar objetos de esa clase.

No pongas la definicion de ningun objeto en el archivo .h

Crea otro archivo .cpp que tenga definiciones de objetos, si los necesitas.

Mejor aun si la clase lo administra Todo. Osea: tener un metodo static que cree los objetos por ti (una fabrica). Nada te impide crearlos tu mismo ya sea instanciando un objeto.o creando uno haciendo new.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 7
Ha aumentado su posición en 10 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Pequeña duda sobre objetos :)

Publicado por Marc (4 intervenciones) el 11/08/2019 16:28:13
Muchas gracias por tus respuestas Rodrigo.


Un Saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar