1

Éste es mi código:

#include<stdio.h>
#include<conio.h>

class operaciones  {

    public: 

    int num1;
    int num2;

    public:

        operaciones( int _num1, int _num2);

        void suma();
        void resta();
        void multiplicacion();
        void division();
        void dato();
};

operaciones::operaciones(int _num1, int _num2)
{
    num1 = _num1;
    num2 = _num2;
}

void operaciones::suma()
{
    int s;
    s = num1 + num2;

    printf("El resultado de la suma es: %d\n",s);
}

void operaciones::resta()
{
    int r;
    r = num1 + num2;

    printf("El resultado de la resta es: %d\n",r); 
}

void operaciones::multiplicacion()
{
    int m;
    m = num1 * num2;

    printf("El resultado de la multiplicacion es: %d\n",m);
}

void operaciones::division()
{
    float d;
    d = num1/num2;

    printf("El resultado de la division es: %f\n",d);
}

void operaciones::dato()
{

printf("Escribir un numero\n");  //Necesito ayuda aquí, para que el usuario ingrese un valor y sea retornado en el programa principal

    scanf("%f"&operaciones.num1);

    printf("Escribir un numero\n");
    scanf("%f"&operaciones.num2);
}

int main()
{


    operaciones o(); // osease aquí y me de los resultados

    o.suma();
    o.resta();
    o.multiplicacion();
    o.division();

}
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82

1 Answers1

3

¿Cómo puedo escribir con scanf en la clase en C++?

No lo hagas, printf y scanf son las funciones de lectura de consola de C, en C++ se usan los objetos stream: std::cout y std::cin.

Además:

  • La cabecera <stdio.h> es de no de . Las cabeceras de C disponen de una versión adaptada a C++ que tiene el prefijo c y carece de extensión. Si realmente necesitas usar las cabeceras de C (que nunca será el caso) debes usar los equivalentes de C++ <cstdio> . Lee este hilo para saber por qué.
  • La cabecera <conio.h> ni siquera es estándar C y no existe en C++, consulta este hilo para saber por qué.

Dicho esto, tu problema está en la manera en que llamas a scanf:

scanf("%f"&operaciones.num1);
// ...
scanf("%f"&operaciones.num2);

Estás operando un literal de cadena de caracteres "%f" contra dos enteros (operaciones::num1 y operaciones::num2) mediante el operador de AND binario &. En otras palabras, le estás pasando a scanf el resultado de evaluar la expresión que dice "Hazme una comparación binaria de tipo AND entre la dirección de memoria de la cadena "%f" y este int"; o eso haría si el código siquiera compilase.

Las instrucciones operaciones.num1 y operaciones.num2 no son válidas, operaciones es el nombre de un objeto y num1/num2 son miembros de dicho objeto, para acceder a miembros de un objeto necesitas una instancia del objeto, no el nombre del mismo, dado que la llamada se realiza en el contexto de la propia clase, no necesitas anteponer el nombre de la misma:

void operaciones::dato()
{    
    printf("Escribir un numero\n");
//            v <--- Coma, para indicar que es un segundo parámetro
    scanf("%f", &num1); // No precedemos 'num1' con el nombre de la clase
//              ^ <--- Operador de "dirección de"

    printf("Escribir un numero\n");
//            v <--- Coma, para indicar que es un segundo parámetro
    scanf("%f", &num2); // No precedemos 'num2' con el nombre de la clase
//              ^ <--- Operador de "dirección de"
}

Pero como ya he dicho, en C++ deberías usar std::cout y std::cin:

void operaciones::dato()
{    
    std::cout << "Escribir un numero\n";
    std::cin >> num1;

    std::cout << "Escribir un numero\n";
    std::cin >> num2;
}
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82