0

最初の簡単なセットアップ: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のドイツ語版です。「VerweisaufnichtaufgelöstesexternesSymbol」とは、次のことを意味します。未解決のexternシンボルへのリンク。

何か案は?=)


これを実行します(これは、エクスポートして他のプロジェクトで使用したいクラスです)

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;

};
4

1 に答える 1

1

リンカがクラスメソッドを見つけるために必要なことは3つあります。

  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++->プリプロセッサ->プリプロセッサの定義

于 2013-02-02T17:37:47.673 に答える