2

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

A.cpp

#include "../A.hpp"

using namespace <name>;

A::A(D* low, D* mid, D* high, M* m)
{
    std::vector<B*>* lTC = split(low);
    std::vector<B*>* mTC = split(mid);
    std::vector<B*>* hTC = split(high);

    D* lDC = new D(lTC);
    D* mDC = new D(mTC);
    D* hDC = new D(hTC);

    mr = m;

    procRDC = new std::vector<D*>();
    procRDC->push_back(lDC); 
    procRDC->push_back(mDC);
    procRDC->push_back(hDC);
}

std::vector<B*>* A::split(D* d)
{
    std::vector<B*>* tc = new std::vector<B*>();
    std::vector<B*>* ob = d->getB();

    for ( std::vector<B*>::iterator it = ob->begin(); it != ob->end(); ++it )
    {
        B* b= *it;

        int a1 = b->getA;
        int a2 = b->getA;
        int a3 = b->getA;

        B* b1 = new B(a1, a2, a3);
        B* b2 = new B(a3, a2, a1);

        tc ->push_back(b1);
        tc ->push_back(b2);
    }

    return tc;
}

A.hpp

#ifndef A_HPP
#define A_HPP

#include "../dec.hpp"
#include "../D.hpp"
#include "../M.hpp"
#include "../B.hpp" 
#include <vector>

using namespace <name>;

class A: public dec
{
protected:
    M* mr;
    std::vector<D*>* procRDC;

public:
    A(D* low, D* mid, D* high, M* marketRound);

protected:
    std::vector<B*>* split(D* d);

}; // class A

#endif

基类 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;  }

B.hpp

#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

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

你们有什么建议可以在下一步寻找以消除错误吗?您是否在某个地方发现了错误?我搜索了太久,无法自己弄清楚。非常感谢您的帮助!顺便说一句,我不得不更改类的实际命名,但我检查了是否正确分配了伪名称。如果需要其他文件来澄清错误,请告诉我,我很乐意将它们放在这里。

4

1 回答 1

0

D.cpp确定包含在您的构建中吗?如果D.cpp丢失,那么您会收到此错误。

要确定,请尝试为 D in 添加定义D.hpp

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

如果这修复了链接器错误,则您D.cpp的构建中不包括在内。

于 2012-03-09T20:54:52.000 回答