简体   繁体   English

C++ 创建和使用 Class

[英]C++ Creating & Using Class

I have to create a class for an assignment, I've done all that I can & I've done the research and I have read my textbook.我必须为作业创建一个 class,我已经做了我能做的一切并且我已经完成了研究并且我已经阅读了我的教科书。 What else do I need to do to my classes to make what is in my Main run?我还需要对我的课程做些什么才能使我的主要运行中的内容? Everything you need to know is in the code description.您需要知道的一切都在代码描述中。

/*  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;
}

The error messages are:错误消息是:

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'

You need to add the method declarations inside the class definition.您需要在 class 定义中添加方法声明。 There is a case mismatch:存在大小写不匹配:

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

You're also missing a default constructor for the class:您还缺少 class 的默认构造函数:

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

therefore you can't do:因此你不能这样做:

LabMetaData Lab7; 

since this attempts to call the missing default constructor.因为这会尝试调用缺少的默认构造函数。 Either define one or pass parameters to the constructor.定义一个或将参数传递给构造函数。

(1) The first error message: error: no 'void LabMetaData::SetData()' member function declared in class 'LabMetaData' means you should look really close at your function setData and make sure they match: (1) 第一条错误信息: error: no 'void LabMetaData::SetData()' member function declared in class 'LabMetaData'意味着你应该仔细查看你的 function setData并确保它们匹配:

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

I note here, you got the capitalization wrong, and in the definition, did not have parameters.我在这里注意到,您的大小写错误,并且在定义中没有参数。 These must match.这些必须匹配。 Your showData function is also has the capitalization wrong.您的showData function 也有大小写错误。

(2) The error message: error: no matching function for call to 'LabMetaData::LabMetaData()' means your class did not receive an automatic default constructor, (since you gave it a constructor that requires parameters), and so it doesn't know how to create one properly at the line: (2) 报错信息: error: no matching function for call to 'LabMetaData::LabMetaData()'意味着你的 class 没有收到自动默认构造函数,(因为你给了它一个需要参数的构造函数),所以它没有'知道如何在行中正确创建一个:

LabMetaData Lab7; 

So you'll either have to construct this with parameters, or provide a default constructor:因此,您要么必须使用参数构造它,要么提供默认构造函数:

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

All the rest of your errors are due to these two issues.你所有的rest的错误都是由于这两个问题造成的。

(3) Responding to your comment, you get the error about Lab4 because the of the line: (3) 回应您的评论,您收到有关Lab4的错误,因为该行:

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

But you never created an object called Lab4 .但是您从未创建过名为 Lab4 的Lab4 Did you mean to call a function on the object Lab7 ?您是想在 object Lab7 上拨打Lab7吗? Also, you said that the SetData function shouldn't return anything.另外,您说过SetData function 不应返回任何内容。 I don't see how it could fail without throwing an exception anyway, so I don't think you need that if statement at all.我不明白它怎么会失败而不抛出异常,所以我认为你根本不需要那个if语句。

C++ is case sensitive. C++ 区分大小写。 setData is not the same as SetData . setDataSetData不同。 You need to call it as you defined it.您需要按照定义的方式调用它。

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

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