在网上看了别人做C++ Primer15.6习题从程序。在“15.3.h”中定义了类和一个全局函数,然后在"15.6.cpp"中调用这个函数。
"15.3.h"中内容如下
#ifndef CP5_EX15_03_QUOTE_H_
#define CP5_EX15_03_QUOTE_H_
#include <string>
#include <iostream>
inline namespace EX03 {
using std::string;
using std::ostream; using std::endl;
class Quote {
public:
Quote() = default;
Quote(string const& b, double p) : bookNo(b), price(p) { }
string isbn() const { return bookNo; }
virtual double net_price(size_t n) const { return n * price; }
virtual ~Quote() = default;
private:
string bookNo;
protected:
double price = 0.0;
};
double print_total(ostream& os, Quote const& item, size_t n) {
double ret = item.net_price(n);
os << "ISBN: " << item.isbn() << " # sold: " << n << " total due: " << ret << endl;
return ret;
}
}
#endif // CP5_EX15_03_QUOTE_H_
15.6.cpp中我是这样调用的
#include "15.3.h"
int main() {
EX03::Quote quote_03("0-201-78345-X", 23.8);
EX03::print_total(std::cout, quote_03, 3);
system("pause");
}
然后报了这两个错
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2005 "double __cdecl EX03::print_total(class std::basic_ostream > &,class EX03::Quote const &,unsigned int)" (?print_total@EX03@@YANAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@ABVQuote@1@I@Z) 已经在 15.3.obj 中定义 15 C:\Users\luxiao\source\repos\15\15\15.6.obj 1
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK1169 找到一个或多个多重定义的符号 15 C:\Users\luxiao\source\repos\15\Debug\15.exe 1
我在网上看到很多人回答这个问题是由于在include头文件时进行了重复定义。但是他们给的例子通常是多个源文件引用同一个头文件,这个我比较好理解重复定义。但是我这里只有一个头文件和源文件,为什么会出现这样的错误呢?请教大家