C++ 无法解决未解决的外部错误LNK2019错误
我正在尝试创建类A的对象。编译工作正常,但链接器抱怨函数A::A中引用了LNK2019未解析的外部符号D::D A.cpp A.hpp 基类dec.cpp包含一个空构造函数 我也给你D.cppC++ 无法解决未解决的外部错误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; }
#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