gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:12:50 25 4
gpt4 key购买 nike

我正在使用 CodeSynthesis XSD C++/Tree Mapping 实用程序将现有的 xsd 转换为我们可以填充值的 c++ 代码。这是我们始终确保遵循架构。

完成转换后,我试图让它工作,以便我可以对其进行测试。问题是,我不习惯用 C++ 执行此操作,这是我第一次使用此工具。

我从一个名为 ABSTRACTNETWORKMODEL 的类开始,其类型为 versno_typefromtime_typetypedef 里面。这是我尝试使用的构造函数以及 typedef

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

所有这些都在 ABSTRACTNETWORKMODEL 类中,double_ 和时间的定义是:

typedef ::xsd::cxx::tree::time<char, simple_type> time;
typedef double 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++。

最佳答案

我以前被这个咬过。如果行:

::xml_schema::time t();

与它在您的代码中出现的完全一样(即带有括号)那么问题是您实际上并没有像您想象的那样实例化一个对象。

实例化一个你会用到的对象

::xml_schema::time t;

相反,第一行声明了一个函数 t(),它不接受任何参数并返回一个 ::xml_schema::time 类型的对象。由于没有函数体,编译器认为您稍后会定义该函数。它是完全合法的 C++,这是人们经常做的事情(比如,在头文件中),所以编译器接受它,不会发出警告,因为它无法知道这不是你的意思,并且做了你没有做的事情没想到。

当你将该函数传递给 ABSTRACTNETWORKMODEL 构造函数时,你会得到一个错误,因为你不能将函数作为参数传递(你可以传递一个指向函数的指针,并且你可以调用函数,传递临时结果):

::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

所以“时间的实例化没有导致错误”的原因是时间对象从未被实例化。 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++,但有时很难保持语法正确。

关于使用 CodeSynthesis XSD 树映射的 C++ 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/164305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com