2008-10-02 4 views
1

CodeSynthesis XSD C++/트리 매핑 유틸리티를 사용하여 기존 xsd를 값을 채울 수있는 C++ 코드로 변환합니다. 우리는 항상 스키마를 따르고 있는지 확인했습니다.CodeSynthesis XSD 트리 매핑을 사용하는 C++ 유형

변환을 수행 한 후 작동하도록 노력하고 있으므로 테스트 해 볼 수 있습니다. 문제는, C++에서이 작업을 수행하는 데 익숙하지 않고이 도구로는 처음입니다.

유형이 versno_type이고 유형이 fromtime_type 이고 내부가 typedef 인 ABSTRACTNETWORKMODEL 클래스부터 시작합니다.

typedef ::xsd::cxx::tree::time<char, simple_type> time; 
typedef double double_; 

시간에 대한 정의입니다 : 여기 내가 사용하려고 생성자뿐만 아니라 형식 정의

ABSTRACTNETWORKMODEL(const versno_type&, const fromtime_type&); 
typedef ::xml_schema::double_ versno_type; 
typedef ::xml_schema::time fromtime_type; 

모든이 ABSTRACTNETWORKMODEL 클래스에 있고 double_와 시간에 대한 정의는이다 여러 생성자가있는 클래스 :

template<typename C, typename B> 
class time: public B, public time_zone 
{ 
    public: 
    time(unsigned short hours, unsigned short minutes, double seconds); 
    ... 
} 

내가 올바르게 새로운 ABSTRACTNETWORKMODEL을 만드는 아니에요 알고 있지만 나는이 작업을 수행 할 필요가 무엇인지 모른다.

::xml_schema::time t(); 
    ABSTRACTNETWORKMODEL anm(1234, t); 

이, 물론, 두 번째 매개 변수를 변환하는 방법에 대한 오류가 발생합니다,하지만 누군가는 그 잘못되는 걸 알 수 있습니다 : 여기이 시점에서 할 노력하고있어 모든입니까? 아니면 적어도 올바른 경로를 알려주십시오. 제가 지금하려고하는 일 중 하나는 C++를 더 배우는 것입니다.

답변

3

나는 이것으로 전에 물 렸습니다. 선 경우는 (즉, 괄호로한다) 코드에 나타나는

::xml_schema::time t(); 

은 정확히 다음 문제는 당신이 생각하는 것처럼 실제로 객체를 인스턴스화하지 않은 것입니다.

당신이

::xml_schema::time t; 

첫 번째 줄을 사용 할 객체를 인스턴스화하는 대신, 인수를 취하지 않고 유형 ::xml_schema::time의 객체를 반환하는 함수의 t()를 선언합니다. 본문이 없기 때문에 컴파일러는 나중에 함수를 정의 할 것이라고 생각합니다. 그것은 완벽하게 합법적 인 C++이며 컴파일러가 받아들이도록 사람들이 많이하는 (예를 들어, 헤더 파일에서) 무언가입니다. 여러분이 의도하지 않은 것을 알 수있는 방법이 없기 때문에 경고를 내지 않으며, 기대 하지마.

그리고이 함수를 ABSTRACTNETWORKMODEL 생성자에 전달하면 함수를 인수로 전달할 수 없기 때문에 오류가 발생합니다 (함수에 대한 포인터를 전달할 수 있으며 함수를 호출하여 결과 임시를 전달할 수 있음).) :

"시간의 인스턴스화로 인해 오류가 발생하지 않았습니다"라는 이유는 시간 개체가 인스턴스화되지 않았기 때문입니다.time 클래스에 기본 생성자가 없으며 올바른 구문으로 t를 인스턴스화하려고하면 예상했던 오류가 발생했습니다.

레코드의 경우 경우에 따라 괄호가 필요합니다. 예를 들어, 같은 줄에 그 일시를 임시 객체를 인스턴스화하고 조작 할 때 :

int hours = time().get_hours(); // assuming that there is now a default constructor 

괄호의 첫 번째 세트를 삭제하면 오류가 발생합니다 때문에 :

int hours = time.set_time("12:00:00am"); // error: there is a time class, but no object named "time" 

내가 정말 좋아, 날 믿어 C + +하지만 문법은 약간의 시간을 똑바로 유지하기 정말 어려울 수 있습니다.

0

사무실에서 묻는다면 내 문제는 ABSTRACTNETWORKMODEL을 만들지 못했지만 실제로는 xml_schema :: time이었습니다.

템플릿 생성 및 유형이 정확하더라도 기본 생성자가 없거나 왜 받아 들여지지 않았기 때문에 시간 인스턴스화로 인해 오류가 발생하지 않는다는 것이 이상합니다.