0

未定義のクラスの問題がいくつかあったので、あるヘッダーが別のヘッダーを追加していて、それ自体が追加されていたので、おそらくその時点では存在しなかったクラスをコンパイルしていたので、これを作成して最初に配置すると、コンパイルは正常に行われました、しかし、コンパイルの最後の1秒でエラーがスローされました

 Error  230 error LNK2020: unresolved token (0600003C) Servicos::.ctor  Servicos.obj

-

public ref class Servicos: public System::Windows::Forms::Form {
    public:
    Servicos(Usuario*,unordered_map<int, std::string>*);
}

その時点では他の関数を気にしていなかったので、コンストラクターを配置しました。クラスをインスタンス化してダイアログを表示するだけだからです。(私もすべての機能を追加しようとしましたが、同じエラーが発生しました)

これはオリジナルです:

namespace MyProject {
public ref class Servicos: public System::Windows::Forms::Form
    {

    //... Some Variables declared

    public: 
        Servicos(Usuario* user, 
            unordered_map<int, std::string>* fab_contas_)
        {
            this->fab_contas_email = fab_contas_;
            this->usuario = user;
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }

//... And Other Functions
};

}

私が何か間違ったことをしている場所を指摘できますか?どうもありがとうございました!ありがとう!

4

1 に答える 1

1

これは私にはあまり意味がありません。リンカーは、クラスのコンストラクターがServicos定義されていないことを伝えています。コンパイルがリンク段階に達したという事実は、ctor が (明示的または暗黙的に) 宣言されたことを意味します。

public ref class Servicos: public System::Windows::Forms::Form { public: ServicosFacebook(Usuario*,unordered_map*); }

構文エラーがありますが、おそらくこのコードが問題を引き起こしているため、これは実際に使用しているものではないはずです(そうでなければ、リンク段階に到達していないでしょう)-関数ServicosFacebookはctorではなく、戻り値の型がありません。

代わりにこれがあると思います:

public ref class Servicos: public System::Windows::Forms::Form { 
  public: 
  Servicos(Usuario*,unordered_map<int, std::string>*); 
} 

これは、 type のコンストラクター (2 つのパラメーターを持つ) があることをコンパイラーに通知しますが、Servicos別の場所で定義されています。これは実際に定義を提供しないため、リンカー エラーにつながる問題です。

ただし、コンストラクターを定義するクラスの定義はMyProject名前空間に存在するため、まったく異なる型です。

上記のクラス宣言を名前空間に入れるだけでは十分ではありません。これはMyProject、1 つの定義の規則に違反するためです。クラスの定義は 1 つしか持てませんが、(同一であっても) 2 つ持つことになります。

修正するには、ヘッダー ファイルの循環依存関係を解決する必要があります。あなたは十分な情報を提供していないので、私はそこであなたを助けることができません. クラスが存在するという概念だけが必要な場合は、ヘッダーで前方宣言を使用して、循環依存を解消できます。

class Servicos;

これにより、そのクラスへのポインターを (メンバー変数または関数パラメーターとして) 宣言できます。適切な Servicos ヘッダーを .cpp ファイル (ヘッダーではなく) に含める必要があります。

アップデート:

試す:

// Servicos.h
// include headers that contain the definition of Windows Forms, Usuario,
// unordered_map, string, etc.
using namespace std;
namespace MyProject {  
  public ref class Servicos: public System::Windows::Forms::Form  
  {  

    //... Some Variables declared  

  public:   
    Servicos(Usuario* user,   
        unordered_map<int, std::string>* fab_contas_);

    //... And Other Functions  
  };  

}  

// Servicos.cpp
#include "Servicos.h"
using namespace MyProject;

Servicos::Servicos(Usuario* user,   
        unordered_map<int, std::string>* fab_contas_)  
{  
  this->fab_contas_email = fab_contas_;  
  this->usuario = user;  
  InitializeComponent();  
  //  
  //TODO: Add the constructor code here  
  //  
}  

//... And Other Functions  

// ServicosUser.h
#include "Servicos.h"

// ... declarations that use Servicos

// ServicosUser.cpp
#include "ServicosUser.h"

// ... definitions of things declared in ServicosUser.h
于 2012-04-16T00:26:41.813 に答える