簡體   English   中英

VisualStudio 2012-兩個項目->鏈接器錯誤(C ++)

[英]VisualStudio 2012 - two projects -> linker error (C++)

首先是我的簡單設置:我有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 auf nichtaufgelöstesexternes Symbol”的意思是:鏈接到未解析的extern符號。

有任何想法嗎? =)


完成此操作(這是我要導出並在其他項目中使用的類)

坐標

#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. 您引用正確的dll /項目
  2. 您在該dll /項目中具有該方法的實現。
  3. 它通過dll導出( __declspec(dllexport) )在外部公開

在標頭中聲明導出的常見做法:

#ifdef EXPORT_MYCLASS
#define MYCLASSEXPORT __declspec(dllexport)
#else
#define MYCLASSEXPORT __declspec(dllimport)
#endif

class MyClass
{
     MYCLASSEXPORT MyClass();
}

然后,您可以在導出dll的預處理程序定義中定義該預處理程序參數。

在Visual Studio中:
項目屬性->配置屬性-> C / C ++->預處理器-> Prerpocessor deffinitios

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM