Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法解决未解决的外部错误LNK2019错误_C++_Visual Studio 2010_Lnk2019 - Fatal编程技术网

C++ 无法解决未解决的外部错误LNK2019错误

C++ 无法解决未解决的外部错误LNK2019错误,c++,visual-studio-2010,lnk2019,C++,Visual Studio 2010,Lnk2019,我正在尝试创建类A的对象。编译工作正常,但链接器抱怨函数A::A中引用了LNK2019未解析的外部符号D::D A.cpp A.hpp 基类dec.cpp包含一个空构造函数 我也给你D.cpp #include "../D.hpp" using namespace <name>; D::D(std::vector<B*>* b) { bs = b; } std::vector<B*>* D::getB() { return bs; }

我正在尝试创建类A的对象。编译工作正常,但链接器抱怨函数A::A中引用了LNK2019未解析的外部符号D::D

A.cpp

A.hpp

基类dec.cpp包含一个空构造函数 我也给你D.cpp

#include "../D.hpp"

using namespace <name>;

D::D(std::vector<B*>* b) 
{
    bs = b;
}

std::vector<B*>* D::getB()
{
    return bs;
}
和D.hpp

#ifndef D_HPP
#define D_HPP

#include "../B.hpp"
#include <vector> 

using namespace <name>;

class D: public C
{
protected:
    std::vector<B*>* bs;

public:
    D(std::vector<B*>* b);
    std::vector<B*>* getB();

}; // class D

#endif
类C只包含一个空构造函数

B.cpp

#inlcude "../B.hpp"

using namespace <name>

B::B(int a1, int a2, int a3)
{
    a1 = a1;
    a2 = a2;
    a3 = a3;
}

int B::getA() { return a1;  }
水电站

现在,它给出了一个在函数A::A中找不到引用的D::D的错误,以及一些在A::A和D::D中都找不到B::B的错误。我已经尝试添加了一个主函数,消除了基类定义,再次检查了头文件的包含情况。。。在VisualStudio10中选择跳转到声明或跳转到定义时,它可以找到确切的D::D函数。我打开了头文件,看看它们是否指向了正确的文件,确实如此

你们有什么建议来消除错误吗?你在什么地方发现错误了吗?我找了太久,自己也找不出来。非常感谢您的帮助! 顺便说一句,我不得不更改类的实际命名,但我检查了伪名称是否被正确分配。如果需要其他文件来澄清错误,请让我知道,我会很高兴地将它们放在这里。

您的构建中肯定包含D.cpp吗?如果缺少D.cpp,则会出现此错误

若要确认,请尝试在D.hpp中添加D的定义:

如果这修复了链接器错误,那么您的构建中就没有包含D.cpp。

您的构建中肯定包含D.cpp吗?如果缺少D.cpp,则会出现此错误

若要确认,请尝试在D.hpp中添加D的定义:


如果这修复了链接器错误,那么您的构建中就没有包含D.cpp。

Oh crap,应该在D.hpp中添加C的头文件。这是真实代码中的情况,但我在这里无意中消除了它,因此添加C.hpp文件并不能解决问题。噢,废话,应该在D.hpp中添加C的头文件。这是真实代码中的情况,但我在这里无意中消除了它,因此添加C.hpp文件并不能解决问题。我尝试了您的建议,但没有解决错误。cpp在源文件中也可见;我可以实例化A、B和D对象。当您将实际代码简化为示例时,您一定在更改某些内容。当你编辑你的问题时,你提到了更多的错误;这些LNK2019错误也是吗?它们都是LNK2019错误,都与类B或D有关。这里我没有详细说明的唯一一件事是基类O,它不是空的,但包含与B或多或少相同的方法。因此,这可能是一个继承问题。。。让我尝试清空基类,看看明天它是否对我有效。如果有,我会发布一个比上面更具体的问题。如果没有,我知道上面的代码不包含重大错误。谢谢你的帮助!我试过你的建议,但没有解决错误。cpp在源文件中也可见;我可以实例化A、B和D对象。当您将实际代码简化为示例时,您一定在更改某些内容。当你编辑你的问题时,你提到了更多的错误;这些LNK2019错误也是吗?它们都是LNK2019错误,都与类B或D有关。这里我没有详细说明的唯一一件事是基类O,它不是空的,但包含与B或多或少相同的方法。因此,这可能是一个继承问题。。。让我尝试清空基类,看看明天它是否对我有效。如果有,我会发布一个比上面更具体的问题。如果没有,我知道上面的代码不包含重大错误。谢谢你的帮助!
#ifndef D_HPP
#define D_HPP

#include "../B.hpp"
#include <vector> 

using namespace <name>;

class D: public C
{
protected:
    std::vector<B*>* bs;

public:
    D(std::vector<B*>* b);
    std::vector<B*>* getB();

}; // class D

#endif
#inlcude "../B.hpp"

using namespace <name>

B::B(int a1, int a2, int a3)
{
    a1 = a1;
    a2 = a2;
    a3 = a3;
}

int B::getA() { return a1;  }
#ifndef B_HPP
#define B_HPP

#include "../O"

using namespace <name>

class B : public O
{
protected:
    int a1;
    int a2;
    int a3;

public:
    B(int a1, int a2, int a3);

public:
    int B::getA();

};

#endif
class D: public C
{
protected:
    std::vector<B*>* bs;

public:
    D(std::vector<B*>* b) : bs(b) {}
    std::vector<B*>* getB() { return bs; }

}; // class D