1. 程式人生 > 其它 >C++primer_15.8 控制代碼類與繼承_compare函式宣告位置

C++primer_15.8 控制代碼類與繼承_compare函式宣告位置

技術標籤:疑難解決c++

如果依照教材編寫程式碼,類定義於<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:
``
總之能解決問題,但為什麼就不清楚了,反正按照教材是行不通的。`