繁体   English   中英

'.setDay' 左侧的错误 C2228 必须有一个类/结构/联合

[英]error C2228 left of '.setDay' must have a class/struct/union

我的项目是对我们在 class 中构建的项目的修改。 例如,它应该打印用户输入的日期并将其转换为一年中的天数。 “2 月 12 日”= 43 但它一直给我 a.setDay 错误。 我的老师指示我把它放在那里,我的代码停止工作,他无济于事。 它也让错误 E0299 无法确定哪个实例重载 function "DayOfYear::DayOfYear" 是打算的。

修改.cpp

    // Headers
#include <iostream>
#include <cstdlib>
#include <string>
#include"DayOfYear.h"

using namespace std;


int main()
{
    // create an instance of a class
    DayOfYear dayOfYearObj("Feburary", 12);

    string month;
    int day;                                        // to hold the day

    // display the purpose of the program
    cout << "This program converts a string into a number representing what\n" <<
        "number in the year the date falls on as well as the day before and after the date provided.\n";

    // get the unout from the user
    cout << "\nEnter in a month and a date: ";
    cin >> month, day;

    dayOfYearObj;

    // diplsy the object
    dayOfYearObj.print();

    cout << endl;
    system("PAUSE");
    return 0;
}

DayOfYear.h


    #pragma once
#include<iostream>
#include<string>
using namespace std;

class DayOfYear
{
private:
    int day;

public:
    static int daysAtEndOfMonth[];
    static string monthName[];
    DayOfYear(string, int);
    void print();
    void setDay(int day) { this->day = day; }
};

DayOfYear.cpp

#include "DayOfYear.h"

int DayOfYear::daysAtEndOfMonth[] = { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };

string DayOfYear::monthName[] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December" };


DayOfYear::DayOfYear(string name, int d)
{
    int day = 0;        //calculated value of date

    if (name == "January" )
    {
        setDay(d);
    }

    else if (name == "February")
    {
        day = daysAtEndOfMonth[0] + d;
        DayOfYear::DayOfYear.setDay(d); 
    }

    else if (name == "March")
    {
        day = daysAtEndOfMonth[1] + d;
        DayOfYear::DayOfYear.setDay(d);
    }

    else if (name == "April")
    {
        day = daysAtEndOfMonth[2] + d;
        DayOfYear::DayOfYear.setDay(d);
    }

    else if (name == "May")
    {
        day = daysAtEndOfMonth[3] + d;
        DayOfYear::DayOfYear.setDay(d);
    }

    else if (name == "June")
    {
        day = daysAtEndOfMonth[4] + d;
        DayOfYear::DayOfYear.setDay(d);
    }

    else if (name == "July")
    {
        day = daysAtEndOfMonth[5] + d;
        DayOfYear::DayOfYear.setDay(d);
    }

    else if (name == "August")
    {
        day = daysAtEndOfMonth[6] + d;
        DayOfYear::DayOfYear.setDay(d);
    }

    else if (name == "September")
    {
        day = daysAtEndOfMonth[7] + d;
        DayOfYear::DayOfYear.setDay(d);
    }

    else if (name == "October")
    {
        day = daysAtEndOfMonth[8] + d;
        DayOfYear::DayOfYear.setDay(d);
    }

    else if  (name == "November")
    {
        day = daysAtEndOfMonth[9] + d;
        DayOfYear::DayOfYear.setDay(d);
    }

    else if (name == "December")
    {
        day = daysAtEndOfMonth[10] + d;
        DayOfYear::DayOfYear.setDay(d);
    }
    else
    {
        cout << "Number is out of range." << endl;
    }
}


// dayofYear print convert and print day of year
void::DayOfYear::print()
{
    int month = 0;
    while (daysAtEndOfMonth[month] < day)
        month = (month + 1) % 12;
    if (month == 0)
        cout << "January" << day << endl << endl;
    else
    {
        cout << endl << monthName[month] << " " << day - daysAtEndOfMonth[month - 1]
            << endl << endl;
    }
}

setDay不是 static 它需要从 class 的实例中调用,因此您不能像这样调用它

DayOfYear::DayOfYear.setDay(d); 

相反,你会取消this

this->setDay(d);

这隐含在 class 方法中被调用,所以你可以删除this->

setDay(d);

实际上,您在"January"中正确执行了此操作,但在后面的几个月中则不正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM