Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Пробемма с перегрузкой


Автор: EvilJC 11.10.2007, 08:22
Код

#include <iostream>
using namespace std;

class MetersToMiles
{
private:
    int Meters;

public:
    MetersToMiles(): Meters(0)
    {}
    MetersToMiles(int Mt): Meters(Mt)
    {}

    void get_distance()
    {
        cout<< "Enter meters: ";
        cin>> Meters;
    }

    void show_distance()
    {
        cout<< "Meters: "<< Meters<< endl;
    }

    operator MilesToMeters()   // тут возникает ошибка.
    {
        float miles= Meters / 1600.0;
        return MilesToMeters(miles);
    }
};

class MilesToMeters
{
private:
    float Miles;

public:
    MilesToMeters(): Miles(0)
    {}
    MilesToMeters(float Ml): Miles(Ml)
    {}

    void get_distance()
    {
        cout<< "Enter miles: ";
        cin>> Miles;
    }

    void show_distance()
    {
        cout<< "Miles: "<< Miles;
    }
};



Когда в main() пытаюсь
использовать
MetersToMiles m1(2400);
MilesToMeters mil= m1;

То он выдает ошибку.
C:\Projects\testOperator\Operator\Distance.h:26: error: expected type-specifier before 'MilesToMeters'
C:\Projects\testOperator\Operator\main.cpp:8: error: conversion from 'MetersToMiles' to non-scalar type 'MilesToMeters' requested
:: === Build finished: 2 errors, 0 warnings ===

В чем проблема? подскажите плиз.

Автор: zkv 11.10.2007, 08:31
EvilJC, либо помести определение класса MilesToMeters вперед, либо возвращай указатель на этот класс, предварительно сообщив о нем так:
class MilesToMeters;
дело в том, чтобы использовать класс (так, чтобы компилятор должен был иметь информацию о размере объекта класса, как в твоем примере), ты должен предварительно определить его.

Автор: Lazin 11.10.2007, 08:33
Откуда компилятор должен узнать о существовании MilesToMeters
Код

#include <iostream>
using namespace std;//!!!не делай так в заголовочном файле!!!

class MilesToMeters
{
private:
    float Miles;
public:
    MilesToMeters(): Miles(0)
    {}
    MilesToMeters(float Ml): Miles(Ml)
    {}
    void get_distance()
    {
        cout<< "Enter miles: ";
        cin>> Miles;
    }
    void show_distance()
    {
        cout<< "Miles: "<< Miles;
    }
};

class MetersToMiles
{
private:
    int Meters;
public:
    MetersToMiles(): Meters(0)
    {}
    MetersToMiles(int Mt): Meters(Mt)
    {}
    void get_distance()
    {
        cout<< "Enter meters: ";
        cin>> Meters;
    }
    void show_distance()
    {
        cout<< "Meters: "<< Meters<< endl;
    }
    operator MilesToMeters()   // тут возникает ошибка.
    {
        float miles= Meters / 1600.0;
        return MilesToMeters(miles);
    }
};

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)