0

我必须为作业创建一个班级,我已经尽我所能,我已经完成了研究并且我已经阅读了我的教科书。我还需要对我的课程做些什么来制作我的 Main run 中的内容?您需要知道的一切都在代码描述中。

/*  LAB07.cpp
    ALEXANDER YHAP
    04/2012

    In this lab you will create a new class called LabMetaData. Objects of this
    class could be used in future lab assignments to store information about 
    the lab itself. 

    An object of class LabMetaData has the following attributes:
    .   Lab Number - A whole, positive number. Zero is valid.
    .   Lab Title - A title for the Lab Assignment
    .   Lab Author - The name of the programmer that wrote the lab.
    .   Lab Data - The date the lab was written, stored as three integer 
        numbers. The Day must be between 1 and 31. The month must be between 1 
        and 12. The year must be 4 digits and in the 21st Century (between 2000 
        and 2099).
    .   Lab Description - A description of the Lab Assignment.

    An object of class LabMetaData has the following methods:
    .   Constructor - set the Lab Number to zero, the Lab date to 1/1/2010, 
        and all other attributes to empty strings. (Hint: call the SetData() 
        from the constructor function to avoid duplicating your code)
    .   SetData() - sets the attributes of the object to the parameters as long 
        as the parameters are valid. Rules: 
        o   ALL of the parameters must be valid in order for ANY of the 
            attributes to change. 
        o   Validation rules are explained above for Lab Number and Lab Date. 
            Title, Author, and Description have no validation.
        o   If no problems are detected, return TRUE. Otherwise return FALSE.
    .   ShowData() - displays all the object's attributes on the console. 

    The main() function and a sample executable is provided. 
*/

#include <iostream>
using namespace std;
//Class Declaration Section
class LabMetaData 
{
    private:
    int labNum;
    string labTitle;
    string labAuthor;
    int Month;
    int Day;
    int Year;
    string labDesc;    

    public:    
//    LabMetaData(int labNum, string labTitle, string labAuthor,int Month, int Day, int Year, string labDesc); //constructor
    LabMetaData(int = 0, string = "Empty Title", string = "Empty Author",int = 01, int = 01, int = 2012, string = "Empty Description");
    void LabMetaData::SetData(int, string, string, int, int, int, string);
    void LabMetaData::ShowData();
};
//Class Implementation Section
LabMetaData::LabMetaData(int Num, string Title, string Author, int MM, int DD, int YYYY, string Desc)
{
    labNum = Num;
    labTitle = Title;
    labAuthor = Author;
    Month = MM;
    Day = DD;
    Year = YYYY;
    labDesc = Desc;
}

void LabMetaData::SetData(int Num, string Title, string Author, int MM, int DD, int YYYY, string Desc)
{
//    labNum = 7;
//    labTitle = "N/A";
//    labAuthor = "Unknown";
//    Month = 01;
//    Day = 01;
//    Year = 2012;
//    labDesc = "N/A";
//    return;
    labNum = Num;
    labTitle = Title;
    labAuthor = Author;
    Month = MM;
    Day = DD;
    Year = YYYY;
    labDesc = Desc;
    return;
}

void LabMetaData::ShowData()
{
     cout << "Lab " << labNum << ": " << labTitle << endl;
     cout << "Created by: " << labAuthor << endl;
     cout << "Date: " << Month << "/" << Day << "/" << Year << endl;
     cout << "Description: " << labDesc << endl;
     cout << endl;

     return;
}

int main()
{

    LabMetaData Lab7; 

    cout << endl << "Uninitialized: " << endl;
    Lab7.ShowData();

    Lab7.SetData(7,
    "Introduction to Classes",
    "Alexander Yhap",
    10, 3, 2010,
    "In this lab you will create a new class called LabMetaData. Objects of this class could be used in future lab assignments to store information about the lab itself.");

    cout << endl << "Intialized: " << endl;
    Lab7.ShowData();

    if(!Lab7.SetData(-1, "Test", "Test", 13, 32, 11, "Causing Errors"))
        cout << "\nErrors!" << endl;

    cout << endl << "After Invalid Modification Attempt: " << endl;
    Lab7.ShowData();

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

错误消息是:

prog.cpp:32:27: error: no 'void LabMetaData::SetData()' member function declared in class 'LabMetaData'
prog.cpp:44:28: error: no 'void LabMetaData::ShowData()' member function declared in class 'LabMetaData'
prog.cpp: In function 'int main()':
prog.cpp:58:17: error: no matching function for call to 'LabMetaData::LabMetaData()'
prog.cpp:21:1: note: candidates are: LabMetaData::LabMetaData(int, std::string, std::string, int, int, int, std::string)
prog.cpp:5:1: note:                 LabMetaData::LabMetaData(const LabMetaData&)
prog.cpp:61:10: error: 'class LabMetaData' has no member named 'ShowData'
prog.cpp:63:10: error: 'class LabMetaData' has no member named 'SetData'
prog.cpp:66:10: error: 'class LabMetaData' has no member named 'ShowData'
prog.cpp:68:9: error: 'Lab4' was not declared in this scope
prog.cpp:72:10: error: 'class LabMetaData' has no member named 'ShowData'
4

3 回答 3

1

您需要在类定义中添加方法声明。有一个大小写不匹配:

class LabMetaData 
{
//....
    void setData(int, string, string, int, int, int, string); // should be SetData
    void showData(); // should be ShowData
};

您还缺少该类的默认构造函数:

class LabMetaData 
{
//....
   LabMetaData(); // <-- default constructor
};

因此你不能这样做:

LabMetaData Lab7; 

因为这试图调用缺少的默认构造函数。定义一个或将参数传递给构造函数。

于 2012-04-04T17:34:04.380 回答
1

(1) 第一条错误消息:error: no 'void LabMetaData::SetData()' member function declared in class 'LabMetaData'意味着您应该仔细查看您的函数setData并确保它们匹配:

void              setData(int, string, string, int, int, int, string);
                  |       |
void LabMetaData::SetData()

我在这里注意到,您的大小写错误,并且在定义中没有参数。这些必须匹配。你的showData功能也有大写错误。

(2) 错误消息:error: no matching function for call to 'LabMetaData::LabMetaData()'表示您的类没有收到自动默认构造函数,(因为您给了它一个需要参数的构造函数),因此它不知道如何在该行正确创建一个:

LabMetaData Lab7; 

因此,您要么必须使用参数构造它,要么提供默认构造函数:

void LabMetaData::LabMetaData() {
    //stuff
}

您所有其余的错误都是由于这两个问题造成的。

(3) 回复您的评论,您会收到以下错误Lab4

if(!Lab4.SetData(-1, "Test", "Test", 13, 32, 11, "Causing Errors"))

但是您从未创建过一个名为Lab4. 您的意思是在对象上调用函数Lab7吗?另外,您说该SetData函数不应返回任何内容。我看不出它怎么会在不抛出异常的情况下失败,所以我认为你根本不需要那个if声明。

于 2012-04-04T17:37:18.187 回答
0

C++ 区分大小写。 setData不一样SetData。您需要按照定义的方式调用它。

于 2012-04-04T17:34:50.610 回答