【问题标题】:How do you have a struct as a private member in a class and creating a parameterized constructor/setter function for it?您如何将结构作为类中的私有成员并为其创建参数化构造函数/设置器函数?
【发布时间】:2021-04-15 13:19:45
【问题描述】:

我还没有看到关于这个的问题,所以我希望这不是重复,但我知道你可以拥有一个结构作为类的私有成员。似乎没有雄辩的方法可以将带有结构的参数化构造函数作为私有成员。然后就出现了为 struct private 成员设置 setter 函数的问题。似乎没有办法通过一个类中的 setter 函数访问结构成员。

Book类的头文件

// Book.h file
// Header file for the Book class

#ifndef BOOK_H
#define BOOK_H
#include <iostream>
#include "Date.h"


class Book {
private:
    std::string m_ISBN;
    std::string m_title;
    std::string m_author;
    Date m_date;
public:
    // constructor
    Book();
    Book(std::string, std::string, std::string, Date);
    void set_date(int, Month, int);

};

#endif

日期结构的头文件

// Date.h file
// Header file for the Date struct

#ifndef DATE_H
#define DATE_H

enum class Month {
    jan = 1, feb, mar, april, may, june, july, aug, sep, oct, nov, dec, MAXMONTH
};

struct Date {
    int m_year { 1800 };
    Month m_month { Month::jan };
    int m_day { 1 };
};

#endif

然后这是我的 cpp 文件

// Book.cpp file

#include "Book.h"

Book::Book() 
    : m_ISBN { " " },
    m_title { " " },
    m_author { " " },
    m_date {1800, Month::jan, 1 }
    {

    }

    Book::Book(std::string ISBN, std::string title, std::string author, Date date)
        : m_ISBN { ISBN },
        m_title { title},
        m_author { author },
        m_date { date }
        {
            
        }

        void Book::set_date(int year, Month month, int day) {
            this->Date::m_year { year }; // error
            this->Date::m_month { month }; // error
            this->Date::m_day { day }; // error 
        }

代码在set_date 之前运行良好,但在此之前。如果您创建一个带有参数的 Book 对象,那么您的操作方式似乎不直观Book one {"random_ISBN", "random_title", "random_author", { 1800, Month::jan, 3} }; 拥有这些嵌套花括号似乎不是最理想的。您可以创建一个 Date 结构,然后将其传递给它,但这似乎是错误的。

【问题讨论】:

  • this-&gt;Date:: 应该是m_date.

标签: c++ class struct constructor member


【解决方案1】:

替换

void Book::set_date(int year, Month month, int day) {
            this->Date::m_year { year }; // error
            this->Date::m_month { month }; // error
            this->Date::m_day { day }; // error 
        }

void Book::set_date(int year, Month month, int day) {
            m_date.m_year = year;
            m_date.m_month = month;
            m_date.m_day = day;
        }

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多