如果依照教材编写代码,类定义于<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:
``
总之能解决问题,但为什么就不清楚了,反正按照教材是行不通的。`