2012-06-10 3 views
0

두 개의 상호 종속 헤더 파일 : Microsoft CLR 구성 요소를 사용하여 빌드 된 BarP.h 및 addNewProductForm.h (길이가 너무 길어서 그대로 포함됩니다) :
BarP. 시간 :
오류 8 오류 C2039 : 'addNewProductForm'B '의 멤버가 아닌Visual C++에 포함하지 못했습니다.

#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)); 
     ... 
    } 
} 

나는, 나는 다음과 같은 오류를 얻을 컴파일하려고

arPricer3 'D ... \ BarP.h 690 (내 코드의 라인 32)
오류 에러 15 C2065'productDat '선언되지 않은 식별자 D : ... \ addNewProductForm.h (181) (내 코드의 라인 (19))

여기에 무슨 일이 일어나고 있는지에 대한 조언을 구할 수 있습니까?

답변

0

헤더 파일에 순환 포함이 있으며 #pragma once 지시문과 결합하면 오류가 발생합니다. 포함 (또는 둘 모두) 중 하나를 제거하고전달 선언으로 대체해야합니다 (google this).

머리글 내부의 형식을 사용하기 때문에 구현을 다른 파일로 분리해야 할 수도 있습니다.

귀하의 문제는 addNewProductForm.hBarP.h에 정의되어 productDat를 사용하고, BarP.h 것을 addNewProductForm.h에 정의되어 addNewProductForm를 사용합니다. (이들은 앞으로 선언해야 할 클래스입니다).

+0

감사합니다. '#pragma once '지시어가 순환 삽입을 피하기위한 것이 아닌가, 아니면 내가 거기에 뭔가를 놓치고 있는가? – deftfyodor

+0

@deftfyodor 아니요, pragma 지시어는 포함 된 가드와 같습니다. 동일한 파일은 두 번 이상 포함되지 않지만 그게 전부입니다. 여전히 순환 종속성을 처리해야합니다. –