環境
Visual Studio 2013 および C++/CLI。
(ho/e)エラー
IntelliSense がコンパイラ準拠の行でエラーを出す状況に直面しました。したがって、偽陽性。
エラーは次のとおりです。
IntelliSense: 関数 "< 完全修飾メソッド名 >" は、指定された引数リストで呼び出すことはできません
引数の型:
< 予想される引数の型 >
オブジェクトの型:
< オブジェクトの型 >
どうしたの
ユーザーコントロールを作成しました。そこで、相対デリゲートを使用してカスタム イベントを宣言しました。フォームを作成しました。フォーム コンストラクターで、ユーザー コントロール インスタンスを割り当て、フォーム メソッドをコントロール カスタム イベントにアタッチしようとします。
コンパイラは、すべて問題ないと言っています。IntelliSense は、イベントの添付ファイルの型が一致しないことを教えてくれます。
再現方法
問題を掘り下げ、問題を再現する必要のあるコンテキストを作成しました。
FavaTest
(ClassLibrary として) とFavaForm
(コンソール アプリケーションとして)の 2 つのプロジェクトでソリューションを作成します。- で
FavaTest
名前が の UserControl を作成しFavaClass
、以下を に貼り付けますFavaClass.h
。
#pragma once 名前空間システムの使用; 名前空間 System::ComponentModel を使用します。 名前空間 System::Collections を使用します。 名前空間 System::Windows::Forms を使用します。 名前空間 System::Data を使用します。 名前空間 System::Drawing を使用します。 名前空間 FavaTest { public ref class FavaClass : public System::Windows::Forms::UserControl { 公衆: FavaClass(void) { InitializeComponent(); } // -- ここでは非常に単純なイベントを定義します -- デリゲート void FavaDelegate(); イベント FavaDelegate^ FavaEvent; 保護: 〜FavaClass() { if (コンポーネント) { コンポーネントを削除します。 } } プライベート: システム::ComponentModel::コンテナ ^components; #pragma region Windows フォーム デザイナーで生成されたコード void InitializeComponent(void) { this->SuspendLayout(); /// // FavaClass /// this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->Name = L"FavaClass"; this->Size = System::Drawing::Size(249, 147); this->ResumeLayout(false); } #pragma endregion }; }
- プロジェクト
FavaForm
で、名前が のフォームを作成しLaForm
、以下を貼り付けますLaForm.h
名前空間 FavaForm { 名前空間システムの使用; 名前空間 System::ComponentModel を使用します。 名前空間 System::Collections を使用します。 名前空間 System::Windows::Forms を使用します。 名前空間 System::Data を使用します。 名前空間 System::Drawing を使用します。 public ref class LaForm : public System::Windows::Forms::Form { 公衆: LaForm(ボイド) { InitializeComponent(); // ここでは単純に FavaClass オブジェクトを割り当て、FavaEvent イベントにアタッチしようとします FavaTest::FavaClass ^item = gcnew FavaTest::FavaClass(); item->FavaEvent += gcnew FavaTest::FavaClass::FavaDelegate(this, &LaForm::onfava); } void onfava(){} 保護: 〜LaForm() { if (コンポーネント) { コンポーネントを削除します。 } } プライベート: システム::ComponentModel::コンテナ ^components; #pragma region Windows フォーム デザイナーで生成されたコード void InitializeComponent(void) { this->SuspendLayout(); /// // ラフォーム /// this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(368, 261); this->Name = L"LaForm"; this->Text = L"LaForm"; this->ResumeLayout(false); } #pragma endregion }; }
- 建てる
FavaTest
FavaForm
プロジェクトで、生成された dll を依存関係として使用するためにcommon properties
、新しい参照を追加します。FavaTest
- ビルド ソリューション。
これで、コンパイラはすべて正常であることを通知しますが、IntelliSense がイベントの添付行に次のようなエラー メッセージを表示していることがわかります。
IntelliSense: 関数 "FavaTest::FavaClass::FavaEvent::add" は、指定された引数リストで呼び出すことはできません
引数の型は:
(FavaTest::FavaClass::FavaDelegate ^)
オブジェクトの型は: FavaTest::FavaClass ^
すぐに実行できるパッケージ
解凍して実行できるようにするために、これらすべてをside-test-standalone-solution zipファイルにパッケージ化しましたが、残念ながら(IMHOも疑わしい)SEのガイドラインのためにここに投稿できないため、作成するのはあなた次第です上記によるデバッグコンテキスト。
質問
何かが欠けている可能性もありますが、以前にこのアルゴリズムを数回使用しましたが、完全に機能しました。現在、2 つの異なるマシン (VS2013 と VS2015) でこれを経験しています。このエラーはあなたにも当てはまりますか? IntelliSense の何が問題なのですか? 私だけが経験しているとは思えないほど単純なシナリオです。しかし、私はインターネット上で手がかりを見つけませんでした。