Visual Studio 2012 - 两个项目 - >链接器错误(C ++)

时间:2013-02-02 17:33:00

标签: c++ visual-c++ linker visual-studio-2012 linker-errors

首先我的简单设置: 我有2个VS2012项目。现在我想在项目A中使用项目B中的类。 我将项目B添加到A的项目依赖项列表中,并在必要时导入标题。 (例如#include“.. \ src-pool \ Coords.h”;)。

到目前为止,这么好 - 没有编译器错误。 但是当我尝试构建项目时,我遇到了一些链接器错误:

Fehler  1   error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall Coords::Coords(double,double)" (??0Coords@@QAE@NN@Z)" in Funktion ""public: void __thiscall TileDownloader::calculateBounds(double *,int)const " (?calculateBounds@TileDownloader@@QBEXPANH@Z)".  C:\Users\username\documents\visual studio 2012\Projects\CPPHA\project\TileDownloader.obj    

对不起,这是VS的德语版。 “Verweis aufnichtaufgelöstesexternesSymbol”的意思是:链接到未解析的外部符号。

有什么想法吗? =)


完成此操作(这是我要在其他项目中导出和使用的类)

Coords.h

#pragma once
#include <iostream>
#ifdef EXPORT_MYCLASS
#define MYCLASSEXPORT __declspec(dllexport)
#else
#define MYCLASSEXPORT __declspec(dllimport)
#endif


class  MYCLASSEXPORT  Coords
{
public:
    Coords(double lat, double lon);
    ~Coords(void);
    double getLon() const;
    void setLon(double val);
    double getLat() const;
    void setLat(double val);

    void printInfos() const;

private:
    double lat, lon;

};

但我收到警告“不一致的dll导出”和相同的错误。对不起,我是C ++的新手


我希望像这样使用它

#include "..\src-pool\Coords.h"

class TileDownloader
{
public:
    TileDownloader(void);
    ~TileDownloader(void);


    void  calculateBounds(double* array, int zoomLevel) const;
    void  downloadTiles() const;

private:
    double maxLat, maxLon, minLat, minLon;

};

1 个答案:

答案 0 :(得分:1)

链接器找到类方法需要做三件事:

  1. 您引用了正确的dll /项目
  2. 您在该dll / project中实现了该方法。
  3. 外部使用dll导出( __declspec(dllexport)
  4. 在标题中声明导出的常规做法:

    #ifdef EXPORT_MYCLASS
    #define MYCLASSEXPORT __declspec(dllexport)
    #else
    #define MYCLASSEXPORT __declspec(dllimport)
    #endif
    
    class MyClass
    {
         MYCLASSEXPORT MyClass();
    }
    

    然后,您可以在导出dll的预处理器定义中定义该预处理器参数。

    在Visual Studio中:
    项目属性 - &gt;配置属性 - &gt; C / C ++ - &gt;预处理器 - &gt; Prerpocessor deffinitios