【问题标题】:LNK2005 of death (c++)LNK2005 死亡 (c++)
【发布时间】:2018-06-23 22:34:14
【问题描述】:

我有一个简单的课程:

兔子.h

class Bunny
{
public: 
    Bunny(string givenName);
    ~Bunny();    
private:
    string name;
};

兔子.cpp

#pragma once
#include "Bunny.h"
Bunny(string givenName)
{
     name = givenName;
};

(我重写了代码,因为我不能复制,所以只是一个快速编写的例子)

includes.h 文件 #include 是这个,source.cpp #include 是那个。每个文件只包含一次,source.cpp 只包含一次includes.h 文件。我确实尝试过使用#ifndef、#define、#endif。 这两种方法都导致了同样的问题:编译器说这个函数(以及我添加的任何其他函数)是多重声明的。 我还尝试将定义复制到 source.cpp (Bunny.h 和 Bunny.cpp 都按原样复制)并且错误消失了。

知道为什么编译器要定义这个函数两次

【问题讨论】:

  • Bunny(string givenName) -> Bunny::Bunny(string givenName) 在您的.cpp 中。
  • 移动 #pragma once 到 Bunny.h
  • 您应该在问题中包含 exact 错误消息。
  • 更喜欢使用初始化列表来初始化成员而不是使用构造函数主体:Bunny::Bunny(string givenName) : name(givenName) { } - 它的存在是有原因的;避免先初始化失败,然后赋值。
  • @Michael Walz a minimal reproducible example真正缺少的。

标签: c++ include lnk2005


【解决方案1】:

问题是在 Includes.h 文件中,我包含了 Bunny.cpp 而不是 Bunny.h 文件。然后编译器定义了两次函数,一次在 cpp 中,一次在 include.h 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2010-09-23
    • 2015-09-02
    相关资源
    最近更新 更多