0

相互に依存する 2 つのヘッダー ファイルがあります: BarP.h と addNewProductForm.h は、Microsoft CLR コンポーネントを使用して構築されています

#pragma once

#include "addNewProductForm.h"
#include "editBarOptionsForm.h"
#include "editDecayParamsForm.h"
#include "editExistingItemForm.h"
#include <math.h>
#include <string>
#include <iostream>
#include <fstream>
#include <msclr\marshal.h>


namespace BarPricer3 {

    using namespace std;
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    using namespace msclr::interop;

ref struct productDat{...};
productDat^ createProduct(String^ name,double firstPrice,double lastPrice,double lastDemand){...};
public ref class BarP{
    ...
    private: System::Void createNewProductForm(...){
        BarPricer3::addNewProductForm^ newProductForm = gcnew addNewProductForm;
        newProductForm->ShowDialog(this);
    }
}

addNewProductForm.h

#pragma once

#include "BarP.h"
#include <fstream>

namespace BarPricer3 {

using namespace std;
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

public ref class addNewProductForm{
        ...
    private: System::Void createNewProduct(...){
         productDat^ theNewP = createProduct(this->name->Text,Convert::ToDouble(this->firstPrice->Text),Convert::ToDouble(this->lastPrice->Text),Convert::ToDouble(this->lastDemand->Text));
        ...
    }
}

コンパイルしようとすると、次のエラーが発生します:
エラー 8 エラー C2039: 'addNewProductForm' : 'BarPricer3' d:...\BarP.h 690 のメンバーではありません (コードの 32 行目)
エラー 15 エラー C2065 : 'productDat' : 宣言されていない識別子 d:...\addNewProductForm.h 181 (コードの 19 行目)

ここで何が起こっているかについて何かアドバイスをもらえますか?

4

1 に答える 1

0

#pragma onceヘッダーファイルに循環インクルードがあり、それがディレクティブと組み合わされてエラーが発生します。インクルードの 1 つ (または両方) を削除し、それらを前方宣言に置き換える必要があります (これをグーグルしたい場合があります)。

ヘッダー内で型を使用するため、おそらく実装を別のファイルに分ける必要があります。

あなたの問題は、で定義されているものを使用し、 で定義されaddNewProductForm.hているものを使用することです。(これらは前方宣言が必要なクラスです)。productDatBarP.hBarP.haddNewProductFormaddNewProductForm.h

于 2012-06-10T23:10:42.300 に答える