Yinlixii
Yinlixii
采纳率75%
2018-12-19 16:27

C++项目链接时出现LINK2005和LINK1169错误,错误发生在哪里?

20
已采纳

在网上看了别人做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头文件时进行了重复定义。但是他们给的例子通常是多个源文件引用同一个头文件,这个我比较好理解重复定义。但是我这里只有一个头文件和源文件,为什么会出现这样的错误呢?请教大家

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • mvwan mvwan 3年前

    测试运行没有报错,我用的2015图片说明

    点赞 评论 复制链接分享

相关推荐