ошибка C2228, ошибка C2275

0

Я здесь новичок. В настоящее время я занимаюсь промежуточным программированием C++ в DeVry. Мы используем книгу C++ Primer Plus, и до сих пор я делаю все в порядке. Мой учитель недавно бросил нам немного кривого шара. Мое текущее задание таково:

Создайте класс Seconds с одной переменной: totalSeconds (используйте тип long). Класс должен иметь одно поведение (метод): convert(). Это поведение должно принимать следующие переменные по ссылке: дни, часы, минуты и секунды. Метод должен преобразовать totalSeconds в эквивалентное время в дни, часы, минуты и секунды. Используйте символические константы в классе для представления количества часов в день, количества минут в час и количества секунд в минуту.

Напишите краткую основную программу, которая получит totalSeconds (используйте тип long). Затем создайте объект Seconds. Передайте totalSeconds объекту Seconds, используя конструкторы или мутаторы. Вызовите метод convert(), отправив дни, часы, минуты и секунды в качестве аргументов и по ссылке. Отображение дней, часов, минут и секунд в основном методе. Любые дороги, вот мой код:

main.cpp

/*GSP 125 Intmed Prgrmg C++/OOP main.cpp*/
#include <iostream>
#include <string>
#include <conio.h>
#include <fstream>
#include "sec.h"


using namespace std;

int input = 0;

int main()
{
    system("TITLE Tick Tack");
    char choice1;
    ofstream fout;
    char filename[50];

    cout << "Save results to file ? (Y/N) : ";
    (cin >> choice1).get();//make choice, Y or N
        if (toupper(choice1) == 'Y')
        {
            cout << "Enter filename(max 50 characters): ";
            cin.getline(filename,50);//string for file name
            fout.open(filename);//makes text file with chosen name
        }
        else
            cout << "Results will not be saved!\n\n";

    // ToDo: add your code here
    cout << "Enter the number of seconds:";
    long input;
    cin >> input;

    BRAVO alpha(long seconds,long minutes,long hours,long days,long years);
    long breakdown = alpha.Totalseconds(); //this gets error C2228: left of '.Totalseconds' must have class/struct/union

    cout << "\n\n" << input << " seconds = \n"<< breakdown << endl;
    cout << year << day_remain << hour_remain << min_remain << seconds << endl;

    // pause
    cout << "\nPress any key to continue...";
    cin.sync();//clearscreen
    _getch();//waitkey

    // return environment variable
    return 0;
}

time.cpp

// time.cpp
#include "time.h"

// constructors
BRAVO::BRAVO(void)
{
    seconds = 0;
    minutes = 0;
    hours = 0;
    days = 0;
    years = 0;
}

BRAVO::BRAVO( long seconds, long minutes, long hours, long days, long years)
{
    seconds = seconds;
    minutes = minutes;
    hours = hours;
    days = days;
    years = years;
}

// destructor
BRAVO::~BRAVO(void)
{}

// behaviors
double BRAVO::Totalseconds(void)
{
    long input = 0;
    //convert to minutes
    long min = input / SecPerMin;
    int sec = input % SecPerMin;
    //convert to hours
    long hour = min / MinPerHour;
    int min_remain = min % MinPerHour;
    //convert to days
    long day = hour / HourPerDay;
    int hour_remain = hour % HourPerDay;
    //convert to years
    long year = day / DaysPerYear;
    int day_remain = day % DaysPerYear;

    return BRAVO; //this gets error c2275: 'BRAVO' : illegal use of this type as an expression
}

// accessors and mutators
short BRAVO::getseconds(void)
  {return seconds;}

void BRAVO::setseconds( long seconds )
  {seconds = seconds;}

short BRAVO::getminutes(void)
  {return minutes;}

void BRAVO::setminutes( long minutes )
  {minutes = minutes;}

short BRAVO::gethours(void)
  {return hours;}

void BRAVO::sethours( long hours )
  {hours = hours;}

short BRAVO::getdays(void)
  {return days;}

void BRAVO::setdays( long days )
  {days = days;}

short BRAVO::getyears(void)
  {return years;}

void BRAVO::setyears( long years )
  {years = years;}

time.h

// sec.h
#ifndef BRAVO_H_
#define BRAVO_H_
#include <iostream>

// global constants
const int DaysPerYear = 365;
const int HourPerDay = 24;
const int MinPerHour = 60;
const int SecPerMin = 60;
long int seconds = 0;
long int minutes=0;
long int hours=0;
long int days=0;
long int years=0;
int min_remain=0;
int hour_remain=0;
int day_remain=0;
int year=0;


// Class definition
class BRAVO
{
    private:
    // accessors
    short seconds;
    short minutes;
    short hours;
    short days;
    short years;

    public:
    // constructors
    BRAVO(void);
    BRAVO(long seconds, long minutes, long hours, long days, long years);

    // destructor
    ~BRAVO(void);

    // behaviors
    double Totalseconds();

    // accessors and mutators
    short getseconds(void);
    void setseconds( long seconds );
    short getminutes(void);
    void setminutes( long minutes );
    short gethours(void);
    void sethours( long hours );
    short getdays(void);
    void setdays( long days );
    short getyears(void);
    void setyears( long years );
    short getmin_remain(void);
    void setmin_remain( long min_remain );
    short gethour_remain(void);
    void sethour_remain( long hour_remain );
    short getday_remain(void);
    void setday_remain( long day_remain );
};

#endif

ошибка C2275: "BRAVO": незаконное использование этого типа в качестве выражения
ошибка C2228: слева от '.Totalseconds' должен быть класс /struct/union

У меня есть только две ошибки, но я не могу найти ответы, в которых указаны мои точные проблемы. По-моему, я немного зашел в файл.h, пытаясь добавить аксессоров и константы, но безрезультатно. большинство из них будут удалены.

UPDATE: после выполнения первого ответа мне удалось решить предыдущие ошибки. Однако я наткнулся на новый. следующая строка convertToDecimal имеет следующую ошибку.

long seconds = 0, minutes = 0, hours = 0, days = 0;
BRAVO alpha(input);
float breakdown = alpha.convertToDecimal(seconds, minutes, hours, days); // pass variables by reference  
//gets error C2660: 'BRAVO::convertToDecimal' : function does not take 4 arguments
cout << "\n\n" << input << " seconds = \n" << breakdown << endl;
cout << year << day_remain << hour_remain << min_remain << seconds << endl;

Я попытался изменить то, что там находится, но мне не повезло. Единственные изменения, которые я внес в convertToDecimal, заключались в том, что я закончил это с помощью

return convertToDecimal;  //this closed the error I was having with it
Теги:
compiler-errors

1 ответ

1
Лучший ответ
BRAVO alpha(long seconds,long minutes,long hours,long days,long years);
long breakdown = alpha.Totalseconds(); //this gets error C2228: left of '.Totalseconds' must have class/struct/union

Первая строка не имеет смысла, вы не должны указывать тип "длинный" перед аргументами здесь. У вас также нет экземпляров этих переменных, которые передаются ему. Ошибка при вызове TotalSeconds завершилась неудачно, потому что в результате этой проблемы "альфа" не была создана с допустимым типом. Чтобы получить его для компиляции, попробуйте:

long seconds = 0, minutes = 0, hours = 0, days = 0;
BRAVO alpha(input);
alpha.convert(seconds, minutes, hours, days); // pass variables by reference

Обратите внимание, что то, что у вас было раньше, - это не то, о чем просит ваше задание, вы должны дать одну переменную, представляющую общее количество секунд, а функция преобразования должна разбить ее на различные компоненты. Измените определения классов для соответствия.

Кто-то еще уже прокомментировал, что

return BRAVO; //this gets error c2275: 'BRAVO' : illegal use of this type as an expression

строка не имеет никакого смысла, поскольку она пытается вернуть тип, а не переменную.

  • 0
    это многое объясняет. Я полагал, что иду не в ту сторону. Я также понял, что забыл пропуск по ссылке, когда задал вопрос. Спасибо за помощь и разъяснения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню