C++ C++;使用CodeSynthesis XSD树映射的类型

C++ C++;使用CodeSynthesis XSD树映射的类型,c++,xsd,templates,types,codesynthesis,C++,Xsd,Templates,Types,Codesynthesis,我使用代码合成XSDC++/树映射工具将现有的XSD转换成C++代码,我们可以填充这些值。这就是我们始终确保遵循的模式 在完成转换后,我试图让它工作,这样我就可以测试它了。问题是,我不习惯在C++中做这件事,这是我第一次使用这个工具。 我从一个名为ABSTRACTNETWORKMODEL的类开始,它的类型为versno\u type和fromtime\u type 在里面打字。这是我试图使用的构造函数以及typedefs ABSTRACTNETWORKMODEL(const versno_typ

我使用代码合成XSDC++/树映射工具将现有的XSD转换成C++代码,我们可以填充这些值。这就是我们始终确保遵循的模式

在完成转换后,我试图让它工作,这样我就可以测试它了。问题是,我不习惯在C++中做这件事,这是我第一次使用这个工具。 我从一个名为ABSTRACTNETWORKMODEL的类开始,它的类型为
versno\u type
fromtime\u type
在里面打字。这是我试图使用的构造函数以及typedefs

ABSTRACTNETWORKMODEL(const versno_type&, const fromtime_type&);
typedef ::xml_schema::double_ versno_type;
typedef ::xml_schema::time fromtime_type;
所有这些都在ABSTRACTNETWORKMODEL类中,双_u和时间的定义如下:

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

当然,这会在转换第二个参数时出错,但是有人能告诉我什么是不正确的吗?或者至少指向我正确的路径,因为我现在正在做的事情之一是在办公室周围了解更多的C++。

,我的问题不是创建抽象的NETWorkMead,但实际上是::XMLSyth::Time./P>
我觉得奇怪的是,时间的实例化没有导致错误,因为它没有任何默认构造函数,或者为什么它没有被接受,即使模板和类型是正确的。

我以前也被它咬过。如果该行:

::xml_schema::time t();
与代码中显示的完全相同(即,使用parens),那么问题是您没有像您所想的那样实际实例化对象

要实例化要使用的对象

::xml_schema::time t;
相反,第一行声明了一个函数t(),该函数不带任何参数,并返回类型为
::xml_schema::time
的对象。由于没有正文,编译器认为您将在以后定义函数。它是完全合法的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++,但是语法会很难保持一些时间。
::xml_schema::time t();
ABSTRACTNETWORKMODEL anm(1234, t()); // calls t(), gets a temporary of type ::xml_schema::time, and passes the temporary to the constructor
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"