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

C++ VisualStudio 2012-两个项目->;链接器错误(C+;+;),c++,visual-c++,linker,visual-studio-2012,linker-errors,C++,Visual C++,Linker,Visual Studio 2012,Linker Errors,首先是我的简单设置: 我有两个VS2012项目。现在我想在项目A中使用项目B中的类。 我将项目B添加到A的项目依赖项列表中,并在必要时导入标题。(例如#包括“.\src pool\Coords.h”) 到目前为止,一切正常-没有编译器错误。 但是,当我尝试构建项目时,会出现一些链接器错误: Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall Coords::Co

首先是我的简单设置: 我有两个VS2012项目。现在我想在项目A中使用项目B中的类。 我将项目B添加到A的项目依赖项列表中,并在必要时导入标题。(例如#包括“.\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-nicht-aufgelöstes-externs-Symbol”的意思是:链接到未解析的extern-Symbol

有什么想法吗?=)


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

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;

};

要使链接器找到类方法,需要做3件事:

  • 您引用了正确的dll/项目
  • 您在该dll/项目中有该方法的实现
  • 它是通过dll导出在外部公开的(
  • 在标题中声明导出的常见做法:

    #ifdef EXPORT_MYCLASS
    #define MYCLASSEXPORT __declspec(dllexport)
    #else
    #define MYCLASSEXPORT __declspec(dllimport)
    #endif
    
    class MyClass
    {
         MYCLASSEXPORT MyClass();
    }
    
    然后,您可以在导出dll的预处理器定义中定义该预处理器参数

    在Visual studio中:

    Project properties->Configuration properties->C/C++->Preprocessor->Prerposor deffinitios

    感谢您的回答,不幸的是它不起作用:/(参见上文)@area404,您是否在项目的预处理器定义(导出dll的)中定义了EXPORT\u MYCLASS?@area404我编辑了这篇文章来解释如何定义argumentYa,我定义了它,但它不起作用。好像我在别的地方犯了个错误。该方法已实施,项目已被引用。。hm@area404该警告意味着您要么没有定义参数,要么两者都定义了参数。您应该只在导出dll项目中定义它。
    #ifdef EXPORT_MYCLASS
    #define MYCLASSEXPORT __declspec(dllexport)
    #else
    #define MYCLASSEXPORT __declspec(dllimport)
    #endif
    
    class MyClass
    {
         MYCLASSEXPORT MyClass();
    }