0

課題のためにクラスを作成する必要があります。できる限りのことを行い、調査を行い、教科書を読みました。メインランにあるものを作成するには、クラスに対して他に何をする必要がありますか? 知っておくべきことはすべて、コードの説明にあります。

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

残りのすべてのエラーは、これら 2 つの問題が原因です。

(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 に答える