z13228604287 发表于 2023-4-21 17:06:13

[求助] 火山 这 @别名 怎么用啊!

本帖最后由 z13228604287 于 2023-4-21 17:09 编辑

模块定义:
<火山程序 类型 = "通常" 版本 = 1 />

类 视觉_标量 <公开 @别名 = "cv.Scalar">
{
    方法 标量 <公开 静态 类型 = 视觉_标量 @嵌入式方法 = "" "">
    参数 a <类型 = 小数>
    参数 b <类型 = 小数>
    参数 c <类型 = 小数>
    参数 d <类型 = 小数>
    {
      @ @dt<视觉_标量> (@<a>,@<b>,@<c>,@<d>)
    }

    #
}




调用:

<火山程序 类型 = "通常" 版本 = 1 />

变量 颜色 <类型 = 视觉_标量>
颜色 = 视觉_标量.标量 (1, 2, 3, 4)


报错:
<E:\VolcanoSoftwarePC_Project\OpenCV\src\main.v>, 1: 错误:
    error C3083: “对象类”:“::”左侧的符号必须是一种类型
    error C2039: "sGetRuntimeClass": 不是 "cv::Scalar_<double>" 的成员
    E:\VolcanoSoftwarePC_Project\OpenCV\x64\include\opencv2/core/types.hpp(696): note: 参见“cv::Scalar_<double>”的声明
    error C3861: “sGetRuntimeClass”: 找不到标识符
编译生成目标文件"E:\VolcanoSoftwarePC_Project\_int\OpenCV\debug\x64\linker\OpenCV.exe"失败
--- 项目"OpenCV"编译或链接失败. 编译过程中共遇到了 0 个警告, 2 个错误.


hcwanz 发表于 2023-4-21 18:36:48

别名不是给类改个名字这么简单。你需要为这个类准备一个c++类,而且这个c++类也不是简单的空类就行,还需要加一些火山需要的成员
像字节集类的对应c++类就在本地文件的
*\win_chs_person\plugins\vprj_win\classlib\sys\base\libs\win_base\include\vol_mem.h里

z13228604287 发表于 2023-4-21 18:50:01

hcwanz 发表于 2023-4-21 18:36
别名不是给类改个名字这么简单。你需要为这个类准备一个c++类,而且这个c++类也不是简单的空类就行,还需要 ...

error C3083: “对象类”:“::”左侧的符号必须是一种类型
    error C2039: "sGetRuntimeClass": 不是 "cv::Scalar_<double>" 的成员
    E:\VolcanoSoftwarePC_Project\OpenCV\x64\include\opencv2/core/types.hpp(696): note: 参见“cv::Scalar_<double>”的声明
    error C3861: “sGetRuntimeClass”: 找不到标识符


怎么解决

hcwanz 发表于 2023-4-21 19:02:29

z13228604287 发表于 2023-4-21 18:50
error C3083: “对象类”:“::”左侧的符号必须是一种类型
    error C2039: "sGetRuntimeClass": 不是 " ...

看字节集类是怎么写的

dengzf 发表于 2023-4-21 19:26:29

<volprg type = "normal" version = 1 />

# 建立一个别名类的内容,初级用户无需理解下面的C++代码.
# @begin
# <> <global>
# <> <include>
# class CMyTestAliasClass : public CVolObject
# {
#   DECLARE_GLOBAL_EMPTY_VOL_CLASS (CMyTestAliasClass)
#
# public:
#   inline_ CMyTestAliasClass () : m_str (_T ("我的测试文本")){ }
#   CVolString AddContent (const CVolString& str1);
#
# protected:
#   CVolString m_str;
# };
# <> </include>
#
# CVolString CMyTestAliasClass::AddContent (const CVolString& str1)
# {
#   m_str.AddText (_T (" - "));
#   m_str.AddText (str1);
#   return m_str;
# }
# <> </global>
# @end

class 我的测试别名类 <public @别名 = "CMyTestAliasClass">
{
    method 加入内容 <public static type = 文本型 @禁止流程检查 = 真>
    param 所欲操作的本对象 <type = 我的测试别名类>
    param 参数1 <type = 文本型>
    {
      @ return @<所欲操作的本对象>.AddContent (@<参数1>);
    }
}

#

z13228604287 发表于 2023-4-21 19:41:13

dengzf 发表于 2023-4-21 19:26
# 建立一个别名类的内容,初级用户无需理解下面的C++代码.
# @begin
#


这是啥怎么看不懂!

Xelloss0618 发表于 2023-4-21 20:37:55

不是跟你说过,别名的C++类必须继承 CVolObject 对象类,不是你随便找个源码就能封装的。
像你搞 OpenCV 这个,别名需要改动它的源码,成本有些高,不建议用别名封装。
页: [1]
查看完整版本: [求助] 火山 这 @别名 怎么用啊!