lnk2001错误 - 未解析的外部(C ++)

时间:2014-12-03 14:58:26

标签: c++ inheritance virtual linker-errors lnk2001

这将是棘手的,因为我无法发布任何真实的代码,但这里有:

我有A-> B-> C形式的遗产,其中C是I类继承自B的写作,B继承自A. A和B都是由其他人写的我无法改变它们(它们看起来是独立的)。我还有一个TestC类,#includes C.h因为它创建了一个可以测试的对象; C类为空,TestC只创建一个C对象。当我在Visual Studio 2013中构建我的TestC项目时,我得到lnk2001错误;如果我把#include C.h.评论出来,这些就会消失。 C项目没有问题编译。

A.h
#pragma once
class A {
    public:
        A() {};
        virtual ~A() {};
        virtual int SomeGoodFunction() {return 0;};
        virtual int BadFunction() {return 0;}; //lnk 2001: unresolved external
    private:
        virtual int SomeOtherFunction() {};
        virtual int SomeOtherBadFunction() {}; //lnk 2001: unresolved external
};

B.h
#pragma once
namespace Model {
#include "A.h"
class B : public A {
    public:
        B() {}; //lnk 2019: unresolved external referenced in C()
        virtual ~B() {}; //lnk 2019: unresolved external referenced in ~C()
    private:
        void Bad() {}; //lnk 2001: unresolved external
        virtual ThisFunctionWorks() {};
        void SoDoesThis() {};
};}

C.h
#pragma once
#include "B.h"
class C : public B {
    friend class TestC;
    public:
        C() {};
        ~C() {};
        int Initialize() {};
};

TestC.h
#pragma once
#include "C.h"
namespace Model {
class TestC {
    int Test();
};
}

TestC.cpp
#pragma once
#include "TestC.h"
namespace Model {
int TestC::Test() {
    C test = C(); //if I comment out, builds just fine
    return 0;
}
}

(Ah& Bh有相应的.cpp'其中的内容是定义的,但内容并不相关,我不会想;它所抱怨的每个功能都有已经在.cpp中定义了(我可以点击'视图定义' VS会跳转到它。请原谅任何语法错误;我把它写成伪代码,因为我在编译后得到了链接器错误语法,我很确定它们不会存在于原始代码中。)

lnk2001错误表示他们无法在A.h中找到虚函数的定义,并且无法找到B.h.的构造函数,解构函数和一个函数(非虚函数)。我可以打开A& B' .h / .cpp文件,看看它抱怨被定义的功能。 TestC包含了包含这些目录的目录(我可以通过点击#includes打开它们,以便它正常工作)。为构建顺序设置项目依赖项。从编程的角度来看,C并不是真的需要从B继承,但是更高的人做出了决定而我的peon自己无法改变它。我猜测它与遗传和/或我不知道的虚函数的细微差别有关。

我错过了什么?我觉得我已经浏览了大多数Stack Overflow文章......

编辑:每个都在他们自己的项目中,除TestC之外的所有内容都是.lib,TestC是.exe。当我在同一个项目中使用这个基本代码时,它编译时没有任何错误,所以我认为它是C& C之间的一个问题。 TestC项目。

0 个答案:

没有答案