代码合成生成的类对typeinfo的未定义引用
Undefined reference to typeinfo for Code Synthesis generated Class
我有一个使用substitutionGroups(多态类型)的XSD架构。模式在Java和C++中使用,Java和JAXB很简单,我在那里没有任何问题。我正在使用代码合成为Schema生成C++类,这就是我遇到的问题。
命令行参数:
xsdcxx cxx-tree
--namespace-map "http://"..."="csspap_xsd"
--hxx-suffix .hpp
--cxx-suffix .cpp
--generate-polymorphic
--polymorphic-type-all
--generate-serialization
--root-element-all
Schema.xsd
基类型称为"MessageType",有3个抽象类型(RequestMessageType、ResponseMessageType和UnpolicydMessageType)扩展了基类型。一些消息扩展了这些类型。我正在玩的是SuccessResponeType,它扩展了ResponseMessageType。
重点是能够将消息作为MessageType传递。我正在尝试确定正在处理的消息类型。
架构代码段:
<xs:element name="Message" type="MessageType">
<xs:annotation>
<xs:documentation>Root Level Message</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="MessageType" abstract="true">
<xs:annotation>
<xs:documentation>Represents a Request, Response, or Unsolicited Response Message</xs:documentation>
</xs:annotation>
</xs:complexType>
<xs:complexType name="ResponseMessageType" abstract="true">
<xs:annotation>
<xs:documentation>All Response Message Types</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="MessageType"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="SuccessResponseType">
<xs:complexContent>
<xs:extension base="ResponseMessageType">
<xs:sequence>
<xs:element name="Comment" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="SuccessResponse" type="SuccessResponseType" substitutionGroup="Message"/>
在Schema.cpp文件中,有一段代码用于比较类:
const ::csspap_xsd::SuccessResponseType& s;
if (typeid(::csspap_xsd::SuccessResponseType) == (typeid(s)) {
// this is a SuccessResponseType
}
所以理论上,我应该能够在课堂上做这样的事情来检查正在处理的消息的类型。
在我的测试课上,我试图打印出SuccessResponseType:的typeinfo.name
#include <typeinfo>
#include <iostream>
#include "Schema.hpp"
int main() {
std::cout << "Schema SuccessResponseType name: " << typeid(csspap_xsd::SuccessResponseType).name << std::endl;
return 0;
}
但是,当我试图编译我的测试类时,我会得到消息"未定义对'typeinfo for csspap_xsd::SuccessResponseType'的引用"。
我已经把xsdcxx的论点读了好几遍了。。。不知道我可能缺少什么,也不知道为什么我不能获得模式类的typeinfo。
如有任何帮助,我们将不胜感激!
-Ace
您正在做一个非常基本的错误,您不能在没有初始化的情况下声明引用:
const ::csspap_xsd::SuccessResponseType& s;
相关文章:
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- OMNeT++:未定义对 'typeinfo for inet::IMobility' 的引用
- 对"typeinfo for <class>"的未定义引用
- 错误:在 C++ 中实现接口模式时未定义对 typeinfo 的引用
- 对[class::function]的未定义引用/对[class]的typeinfo的未定义参考
- 代码合成生成的类对typeinfo的未定义引用
- 链接错误未定义vtable和typeinfo
- 对"类的typeinfo"的未定义引用和对"vtable for class"的未定义引用
- .data.rel.ro+0x8 错误:未定义对"typeinfo for android::MediaSource"的引用