Ошибка при перегрузке оператора «>>» - PullRequest
3 голосов
/ 08 марта 2012

Я создаю объект Money для проекта. Я не прошу помощи в реализации, потому что мне действительно нужно это выяснить, но я получаю следующую ошибку (и это единственная ошибка!)

ошибка C2678: двоичный файл «>>»: не найден оператор, который принимает левый операнд типа «std :: istream» (или нет приемлемого преобразования)

У меня нет ошибок в моем файле Money.h или Money.cpp, только файл test.cpp. Вот содержимое всех трех файлов:

Money.h

#ifndef MONEY_H
#define MONEY_H
#include <iostream>
#include <string>
class Money
{
public:
    Money( );
    Money( int dollars, int cents );

    friend std::istream& operator>>( std::istream &i, Money &m );

private:
    int dollars;
    int cents;
};
#endif

Money.cpp

#include "Money.h"

Money::Money(void) : dollars(0), cents(0)
{

}

Money::Money( int dollars, int cents ) : dollars(dollars), cents(cents)
{

}

std::istream& operator>>( std::istream &i, Money &m )
{

    int d;
    int c;
    char input;
    std::string dollars = "";
    std::string cents = "";

    input = std::cin.peek();
    while (std::cin.peek() != '.')
    {
        if ( !( (input >= '0') && (input <= '9') ) )
        {
            std::cin.ignore();
        }
        else
        {
            input = std::cin.get();
        }

        dollars += input;
    }

    if ( std::cin.peek() == '.')
    {
        std::cin.ignore();
    }

    std::cin >> cents;

    d = atoi(dollars.c_str());
    c = atoi(cents.c_str());

    m = Money(d, c);

    return i;
}

Наконец, test.cpp:

#include "Money.h"

int main()
{
    Money newMoney();
    std::cout << "Enter a money object!" << std::endl;
    std::cin >> newMoney;
}

Итак, у вас это есть. Я почти уверен, что это настолько урезано, насколько я могу это понять.

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

У вас недостаточно данных в вопросе. Но, посмотрев на мой хрустальный шар, я вижу, что у вас определено operator>> в вашем файле .CPP, но не удалось объявить operator>> в вашем .H.

Добавьте следующую строку в ваш .H:

std::istream& operator>>( std::istream &i, Money &m );
<ч />

Мой хрустальный шар неисправен. Ошибка лежит здесь:

Money newMoney();

Это не объявляет Money объект с именем newMoney. Он объявляет внешнюю функцию с именем newMoney, которая не принимает параметров и возвращает объект Money. Замените эту строку этой:

Money newMoney;
0 голосов
/ 08 марта 2012

Ничего не появляется, кроме как обычно, я бы определил это

std::istream& operator>>

как

friend std::istream& operator>>
...