用下面的代码说明问题可能更好:
注意:只需查看注释的行并以#
开头即可。
问题:
如何订购#1,#2,#3和#4行?棘手的部分是#2取决于#3,但#3取决于#1
(补充说明:我被要求将构造函数保留在类体内。)
/* --------------------Header-------------------- */
struct Sales_data { /* #1: class definition */
/* #2: member function (calling a non-member function) */
Sales_data(std::istream &is){read(is, *this);
};
std::string bookNo;
unsigned units_sold = {0};
double revenue {0.0 };
};
/* #3: declaration of the non-member function */
std::istream &read(std::istream &is, Sales_data &item) ;
/* --------------------Source-------------------- */
/* #4: definition of the non-member function */
istream &read(istream &is, Sales_data &item) {
/* .... */
}
int main(){
/* .... */
}
答案 0 :(得分:5)
您可以转发声明结构和类。所以:
struct Sales_data;
std::istream& read(std::istream& is, Sales_data& item);
然后其他一切。