首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ODB:包含带有公共声明的*.hxx文件时未解决的外部符号错误

ODB:包含带有公共声明的*.hxx文件时未解决的外部符号错误
EN

Stack Overflow用户
提问于 2016-02-15 11:13:25
回答 1查看 417关注 0票数 0

我必须在我的项目中使用ODB框架。我有两个文件:station.hxxcommon.hxx,内容如下:

common.hxx

代码语言:javascript
复制
#ifndef COMMON_HXX
#define COMMON_HXX

#include <string>

#pragma db value
struct ProcessAggregateName
{
#pragma db column("SHORTNAME")
   std::string SHORTNAME;
#pragma db column("LONGNAME")
   std::string LONGNAME;
#pragma db column("SECONDARYNAME")
   std::string SECONDARYNAME;
};

#pragma db value
struct Reporting
{
#pragma db column("OPERATIONALLOG")
   std::string OPERATIONALLOG;
#pragma db column("PRINTER")
   std::string PRINTER;
#pragma db column("HIGHLIGHTING")
   bool HIGHLIGHTING;
#pragma db column("REPORTTYPE")
   std::string REPORTTYPE;
};

#endif // COMMON_HXX

station.hxx

代码语言:javascript
复制
#ifndef STATION_HXX
#define STATION_HXX

#include <string>

#include "common.hxx"

#pragma db object table("STATION")
class station
{
public:
   station () {}

   #pragma db id column("ID")
   int ID;
   #pragma db column("OPERATINGDOMAIN")
   long OPERATINGDOMAIN;
   #pragma db column("NAME")
   ProcessAggregateName NAME;
   #pragma db column("EXPORTBASICDATA")
   bool EXPORTBASICDATA;
   #pragma db column("EXPORTPROCESSDATA")
   bool EXPORTPROCESSDATA;
   #pragma db column("IMPORTBASICDATA")
   bool IMPORTBASICDATA;
   #pragma db column("IMPORTPROCESSDATA")
   bool IMPORTPROCESSDATA;
   #pragma db column("REPORTING")
   Reporting REPORTING;
};

#endif // STATION_HXX

原因是:我希望在其他文件中也使用在common.hxx中声明的结构,所以我希望将它们集中在同一个头文件中,并将它们包含到我需要的任何地方。我的问题是:如果我这样做,我会得到链接器错误如下:

error LNK2019:未解决的外部符号"public: static __cdecl __cdecl odb::mssql::bind *,struct odb::access::composite_value_traits::image_type &,枚举odb::mssql::statement_kind)“函数中引用的odb::mssql::statement_kind "public: static __cdecl odb::access::object_traits_impl::bind(struct::mssql::bind *,struct odb::access::object_traits_impl::image_type &,( (?bind@?$object_traits_impl@Vstation@@$03@access@odb@@SAXPAU0mssql@3@AAUimage_type@123@W4statement_kind@43@@Z) )odb::mssql::statement_kind) error LNK2019:未解决的外部符号"public: static __cdecl __cdecl odb::access::composite_value_traits::image_type &,struct ProcessAggregateName const &,)“函数中引用的(?init@?$composite_value_traits@UProcessAggregateName@@$03@access@odb@@SAXAAUimage_type@123@ABUProcessAggregateName@@W4statement_kind@mssql@3@@Z)”公共:静态空__cdecl odb::access::object_traits_impl::init(struct odb::access::object_traits_impl::image_type &,class station const &,( (?init@?$object_traits_impl@Vstation@@$03@access@odb@@SAXAAUimage_type@123@ABVstation@@W4statement_kind@mssql@3@@Z) )odb::mssql::statement_kind)

如果我将ProcessAggregateNameReporting的声明直接复制到station.hxx中,而不是包含common.hxx,那么一切都会好起来。我做错了什么,如何在单个头中声明常用的结构并将其包含在多个*.hxx文件中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-15 14:04:25

odb编译器/代码生成器为持久层创建三个元素-- .hxx.ixx.cxx文件。.hxx.ixx文件包含执行持久性所需的类型声明。这些将满足编译器在构建时-你告诉它界面是什么样子。

但是,为了使用代码,您需要实现文件(定义)。这些文件只存在于.cxx文件中。

如果没有.cxx文件,您将得到odb::access…链接器错误;这些表示声明后面的代码丢失了。

一旦您确保.cxx文件被编译并链接到您的项目中,编译就会成功。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35407888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档