金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2318|回复: 8

C++接口使用的问题咨询

[复制链接]

55

主题

179

帖子

179

积分

等级: 免费版

注册:
2021-11-18
曾用名:
发表于 2022-4-28 17:31 | 显示全部楼层 |阅读模式
有个C++接口模板使用的请教:

官方C++接口的范例,我使用官方solution编译是能正常能运行的,在原函数内部增加一些查询历史K线数据或者显示到窗口的语句,都是正常运行的,所以我就开始进行算法编程了。

然后,我就打算,把原范例中的stData(储存了一个品种的历史K线数据)传递到另一个我新写的模块中,开始进行处理。为了简洁,我仅仅是做了传递,不做任何操作,具体如下:

1、建立“数据处理主模块.h”,仅仅3行
#pragma once
#include "AddinInterface.h"
void proceed_data( PCALCINFO *stData );


2、建立“数据处理主模块.cpp”,仅仅3行,里面没有任何实现语句,仅仅为了测试通过。
#include "AddinInterface.h"
#include "数据处理主模块.h"
void proceed_data( PCALCINFO *stData ){
}


3、在原模板的  MainWindowDlg.cpp,添加如下语句
#include "数据处理主模块.h"     //这个是在前面包含我写的处理头文件
void CMainWindowDlg::OnButton1Gedata()
if(g_pMainFormework->GetDataInfo(&stData))
{
         proceed_data( &stData );//在原模块里面加了这一行,就为了把数据传递过去







问题是:
编译时候出现190个错误,全是来源于:AddinInterface.h的,例如“严重性        代码        说明        项目        文件        行        禁止显示状态
错误        C3646        “m_wMarket”: 未知重写说明符        AddinDemo        F:\Users\H\AddinDemo - 副本 - v1\AddinInterface.h        68       

全部都是原来模块定义的数据结构变成了未知。

我不明白为什么,仅仅新建一个模块,然后里面调用其他模块的数据,就出现这些错误?谢谢!

想问这个问题如何解决?
截图202204281729362512.png


回复

使用道具 举报

1

主题

843

帖子

853

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-4-28 17:49 | 显示全部楼层
不要在默认的系统头文件中添加函数,你应该自己新建类,然后再其他位置引用数据,比如再 CMainWindowDlg 类中
回复

使用道具 举报

55

主题

179

帖子

179

积分

等级: 免费版

注册:
2021-11-18
曾用名:
 楼主| 发表于 2022-4-28 17:53 | 显示全部楼层
能给多一点操作提示吗?是从CMainWindowDlg类继承一个新的类,然后在这个新的类里面进行操作?
回复

使用道具 举报

55

主题

179

帖子

179

积分

等级: 免费版

注册:
2021-11-18
曾用名:
 楼主| 发表于 2022-4-28 20:02 | 显示全部楼层
我刚才新建了一个类,类里面只定义一个函数,函数里面什么都没有写,这个类目前也没有从MainWindowDlg继承。
class Data
{
        public:
        void get_data();
};
这时候编译是正常的。

但只要我在新类的头文件 加入  #include "AddinInterface.h",就立刻报错了,报错是几百条,都是"AddinInterface.h"里面的数据类型错误。

我想问,应该怎么建立新类,才能让新的类可以处理数据呢?

我应该不能从原来的Mainwindowdlg类里面全部实现处理函数吧?因为处理行数很多,需要模块化。
回复

使用道具 举报

1

主题

843

帖子

853

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-4-28 22:37 | 显示全部楼层
你目前提供的信息不足以我们判断你的问题,建议你可否提供一个简单的范例程序呢?
回复

使用道具 举报

55

主题

179

帖子

179

积分

等级: 免费版

注册:
2021-11-18
曾用名:
 楼主| 发表于 2022-4-29 00:22 | 显示全部楼层
头文件:Data.h
#pragma once
class Data
{
        public:
                void get_data();
};

CPP文件:Data.cpp
#include "Data.h"
void Data::get_data(){
}

在MainWindowDlg.cpp里面include “Data.h”,
以上方式是正常编译通过的。


然后我在Data.h里面加了一行 #include "AddinInterface.h",整个文件是
#include "Data.h"
#include "AddinInterface.h"
void Data::get_data(){
}

这时候就100多个编译错误了。
我的目的是,在在MainWindowDlg.cpp的一个button的处理函数中,调用“data.h"的get_data函数,但参数是get_data( PCALCINFO a),这样的方式,能传递一个PCALCINFO这些金字塔C++自定义的类型
回复

使用道具 举报

1

主题

843

帖子

853

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-4-29 10:07 | 显示全部楼层
出现这个问题主要是 AddinInterface.h 被重复的引用导致。
你的问题建议的处理方式如下:
1,取消data.h文件中的 AddinInterface.h 引用
2,将get_data( PCALCINFO a) 修改为 get_data( void * a)  以指针的方式传递数据结构过去,然后在get_data函数中再将结构转换回来。
回复

使用道具 举报

55

主题

179

帖子

179

积分

等级: 免费版

注册:
2021-11-18
曾用名:
 楼主| 发表于 2022-4-29 10:44 | 显示全部楼层
谢谢技术人员解答!
关于PCALCINFO的结构如何转回来的方法:是否在data.h里,拷贝Addinterface.h里面PCALCINFO的定义语句,自己重新一定一个一模一样的结构?
回复

使用道具 举报

1

主题

843

帖子

853

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-4-29 11:31 | 显示全部楼层
不可以的,结构名称是不可以重复定义的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2024-11-16 10:20 , Processed in 0.253808 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表