2017-01-19 7 views
-1

次はうまくいくでしょう。別のライブラリで関数を使用しようとすると、リンカエラーが発生します。クラス 'ヘッダーのStructの関数宣言とcppの定義。 lnk2019別のlibの関数を使用する場合

OtherClass.obj : error LNK2019: unresolved external symbol "public: float __cdecl myClass::myClassStruct::myConvoludedFunction(int,int)" ([email protected]@[email protected]@[email protected]) referenced in function "public: __cdecl myNamespace::OtherClass::OtherClassFunc(class myNamespace::Something &)" ([email protected]@@[email protected]@[email protected]@Z) 

ヘッダー:実際のコードで

class MY_EXPORT_MACRO myClass 
    { 
    public: 
     myClass(); 
     ~myClass(); 
     struct myClassStruct 
     { 
      int var1 
      int var2 
      float myConvoludedFunction(int,int); 
     } 
    } 

CPP

#include "myClass.h" 
myClass::myClass() 
{ 
    //something initialisy 
} 

myClass::~myClass() 
{ 
    //something destructiony 
} 

float myClass::myClassStruct::myConvoludedFunction(int a, int b) 
{ 
    //Something convoluded and secret 
    return 0; 

} 

クラスで定義された構造体の数があります。そこで、パブリックメンバーとメンバー関数を使ってネストされたクラスを作成しようとしました。同様のこと:libビルド、lnk2019別のlibの関数を使うとき。 myClassの他の関数は正常に動作します。

それはこのように使われている:

#include myClass.h 
namespace myNameSpace 
{ 
    OtherClass::OtherClassFunc(Something & athing) 
    { 
     myClass * object = new myClass(); 

     myClass::myClassStruct aStruct; 

     FunctionThatInitialisesStruct(aStruct); 

     aStruct.someConvoludedFunction(1,2); 

    } 
} 

は、私はそれは明らかに間違ってやっているものはありますか?別々に宣言された構造体関数定義を持つことは標準ではありませんか?

+0

hurpdurpのタイプミス。私は、取り組んでいる多くのコードを削除しました。一定。 – codeMetis

答えて

1

myClassStructのシンボルもエクスポート/インポートする必要があります。

用途:問題の

struct MY_EXPORT_MACRO myClassStruct { ... }; 
+0

構造体がエクスポートされたクラスの中で宣言されていても? これでコンパイルされます。エクスポートされたクラスの中で宣言されている場合、構造体のエクスポートマクロが必要な理由はまだ分かりません。私はクラスのすべてが輸出されたと思った。 – codeMetis

+1

はい。ネストされたクラスが実装の詳細である場合、クラスはネストされたクラスをDLLのユーザーが使用することを望まないかもしれません。 –

+0

興味深い。あなたはもっと知っている。 他にエクスポートされたクラスでエクスポートされないものは何ですか? – codeMetis

関連する問題