C++primer_15.8 控制代碼類與繼承_compare函式宣告位置
阿新 • • 發佈:2021-02-08
如果依照教材編寫程式碼,類定義於<exercise.h>中,如下:
class Basket {
typedef bool(*Comp)(const Sales_item&, const Sales_item&);
public:
typedef multiset<Sales_item, Comp> set_type;
typedef set_type::size_type size_type;
typedef set_type::const_iterator const_iter;
Basket() :items (compare){}
void add_item(const Sales_item& item) { items.insert(item); }
size_type size(const Sales_item& i)const { return items.count(i); }
double total()const;
private:
multiset<Sales_item, Comp>items;
};
其中compare函式的宣告置於<exercise.h>的頭部,如下:
#pragma once
#ifndef _EXERCISE_H_
#define _EXERCISE_H_
#include"func.h"
bool compare(const Sales_item& s1, const Sales_item& s2);
而compare函式的定義置於<exercise.cpp>中,如下:
bool compare(const Sales_item& s1, const Sales_item& s2){
return s1->book() < s2->book();
}
那麼就會報如下錯誤:
除錯很久都不行,老是報其他錯誤,直到將其函式宣告置於緊挨著類定義的上面一行才解決,位置如下:
bool compare(const Sales_item& s1, const Sales_item& s2);
class Basket {
typedef bool(*Comp)(const Sales_item&, const Sales_item&);
public:
``
總之能解決問題,但為什麼就不清楚了,反正按照教材是行不通的。`