右键可以转到定义,但是编译时报错,提示未声明标识符

littlemxz 2013-09-27 11:30:55
使用托管C++封装一个非托管C++写的API(为了给C#调用)。封装另一个API却可以,API的编写风格是一致的。到底是怎么回事呢
...全文
3010 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
littlemxz 2013-10-08
  • 打赏
  • 举报
回复
没有using ThostFtdcLevel2UserApi.h 的namespace
xiaohuh421 2013-09-28
  • 打赏
  • 举报
回复
#include "StdAfx.h" #pragma once 这个位置需要换一下
91program 2013-09-28
  • 打赏
  • 举报
回复
引用 6 楼 hdt 的回复:
大致看了下,应该是头文件包含问题
是的,大概是这样的。右键可跳转,说明是有定义的、但没有正确的包含。
真相重于对错 2013-09-28
  • 打赏
  • 举报
回复
大致看了下,应该是头文件包含问题
modyaj 2013-09-27
  • 打赏
  • 举报
回复
大家能猜出个啥
91program 2013-09-27
  • 打赏
  • 举报
回复
是的,上代码来分析。
真相重于对错 2013-09-27
  • 打赏
  • 举报
回复
具体代码 ??
littlemxz 2013-09-27
  • 打赏
  • 举报
回复
引用 1 楼 hdt 的回复:
具体代码 ??
引用 2 楼 91program 的回复:
是的,上代码来分析。
引用 3 楼 modyaj 的回复:
大家能猜出个啥
引用 4 楼 xiaohuh421 的回复:
能转到定义, VS经常有这个的错误. 一切都要以编译器为准, 它说没定义, 就是没定义. 我是 " Alt+G " "转到定义" 两个都用, 有时候一个失效的时候, 另一个能工作得很好.
代码按照输出那里的顺序,省略的内容用省略号表示,C开头的结构体是在API提供的头文件里边定义的,在Delegates.h遇到第一个C开头的结构体就开始报错,“错误 1 error C2144: 语法错误:“void”的前面应有“;”” Stdafx.h
#pragma once
Stdafx.cpp
#include "stdafx.h"
CTP.h
#pragma once
CTP.cpp
#include "StdAfx.h"
Util.h
 
#include "StdAfx.h"
#pragma once

#include "..\thosttraderapi\ThostFtdcLevel2UserApi.h"
#include "Struct.h"
#include "Delegates.h"


using namespace CTP;

namespace Native
{
	/// 非托管类,自动释放字符串指针内存
	class CAutoStrPtr
	{
	public:
		char* m_pChar;
		//int m_Length;
		CAutoStrPtr(String^ str);
		//CAutoStrPtr(String^ str, void* pDst, int length);
		~CAutoStrPtr();
	};


	/// 非托管类, 自动转换 Managed <==> Native 
	// M: managed
	// N: native
	template<typename M, typename N> 
	class MNConv
	{
	public:
		// 模版类的实现部分必须放在头文件里,否则链接会出错
		/// Native to Managed
		static M N2M(N* pNative){
			return safe_cast<M>(Marshal::PtrToStructure(IntPtr(pNative), M::typeid));
		};
		// Managed to Native
		static void M2N(M managed, N* pNative){
			Marshal::StructureToPtr(managed, IntPtr(pNative), true);
		};
	};

	/// 全局函数
	ThostFtdcRspInfoField^ RspInfoField(CThostFtdcRspInfoField *pRspInfo);

};
Util.cpp

#include "StdAfx.h"
#include "Util.h"

#include <string.h>
#include <memory.h>
#include <stdlib.h>

using namespace System::Runtime::InteropServices;

namespace Native
{
	CAutoStrPtr::CAutoStrPtr(String^ str)
	{
		if(str != nullptr)
		{
			m_pChar = (char*) Marshal::StringToHGlobalAnsi(str).ToPointer();
			//m_Length = strlen(m_pChar);
		}
		else
			 m_pChar = nullptr;
	}
	CAutoStrPtr::~CAutoStrPtr()
	{
		if(m_pChar != nullptr)
			Marshal::FreeHGlobal(IntPtr(m_pChar));
	}


	ThostFtdcRspInfoField^ RspInfoField(CThostFtdcRspInfoField *pRspInfo)
	{
		return safe_cast<ThostFtdcRspInfoField^>(Marshal::PtrToStructure(IntPtr(pRspInfo), ThostFtdcRspInfoField::typeid));
	}

}
Struct.h

#pragma once

using namespace System;
using namespace System::Runtime::InteropServices;

namespace CTP
{
	public enum struct EnumTeResumeType	//THOST_TE_RESUME_TYPE
	{
		THOST_TERT_RESTART = 0,
		THOST_TERT_RESUME,
		THOST_TERT_QUICK
	};
	/////////////////////////////////////////////////////////////////////////
///TFtdcInstrumentStatusType是º?一°?个?合?约?交?易°¡Á状Á¡ä态¬?类¤¨¤型¨ª
/////////////////////////////////////////////////////////////////////////
public enum struct EnumInstrumentStatusType: Byte
{
/// <summary>
///开a盘¨¬前¡ã
/// </summary>
BeforeTrading = (Byte)'0',
/// <summary>
///非¤?交?易°¡Á
/// </summary>
NoTrading = (Byte)'1',
/// <summary>
///连¢?续?交?易°¡Á
/// </summary>
Continous = (Byte)'2',
/// <summary>
///集¡¥合?竞o价?报À¡§单Ì£¤
/// </summary>
AuctionOrdering = (Byte)'3',
/// <summary>
///集¡¥合?竞o价?价?格?平?衡a
/// </summary>
AuctionBalance = (Byte)'4',
/// <summary>
///集¡¥合?竞o价?撮䨦合?
/// </summary>
AuctionMatch = (Byte)'5',
/// <summary>
///收º?盘¨¬
/// </summary>
Closed = (Byte)'6'
};
…………………………………
}
Delegates.h

#pragma once

namespace CTP
{
	// common deleagats
	public delegate void FrontConnected();
	public delegate void FrontDisconnected(int nReason);
	public delegate void HeartBeatWarning(int nTimeLapse);
	public delegate void RspUserLogin(ThostFtdcRspUserLoginField^ pRspUserLogin, ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
	public delegate void RspUserLogout(ThostFtdcUserLogoutField^ pUserLogout, ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
	public delegate void RspError(ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);

	// marketdata 
	public delegate void RspSubLevel2MarketData(ThostFtdcSpecificSecurityField^ pSpecificSecurity, ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
	public delegate void RspUnSubLevel2MarketData(ThostFtdcSpecificSecurityField^ pSpecificSecurity, ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
	public delegate void RspSubNGTSIndex(ThostFtdcSpecificSecurityField^ pSpecificSecurity, ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
	public delegate void RspUnSubNGTSIndex(ThostFtdcSpecificSecurityField^ pSpecificSecurity, ThostFtdcRspInfoField^ pRspInfo, int nRequestID, bool bIsLast);
	public delegate void RtnLevel2MarketData(ThostFtdcLevel2MarketDataField^ pLevel2MarketData);
	public delegate void RtnNGTSIndex(ThostFtdcNGTSIndexField^ pNGTSIndex);
};

#ifdef __CTP_MA__

namespace Native
{
	delegate void Internal_FrontConnected();
	delegate void Internal_FrontDisconnected(int nReason);
	delegate void Internal_HeartBeatWarning(int nTimeLapse);
	delegate void Internal_RspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
	delegate void Internal_RspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
	delegate void Internal_RspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
	

	delegate void Internal_RspSubLevel2MarketData(CThostFtdcSpecificSecurityField *pSpecificSecurity, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
	delegate void Internal_RspUnSubLevel2MarketData(CThostFtdcSpecificSecurityField *pSpecificSecurity, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
	delegate void Internal_RspSubNGTSIndex(CThostFtdcSpecificSecurityField *pSpecificSecurity, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
	delegate void Internal_RspUnSubNGTSIndex(CThostFtdcSpecificSecurityField *pSpecificSecurity, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
	delegate void Internal_RtnLevel2MarketData(CThostFtdcLevel2MarketDataField *pLevel2MarketData);
	delegate void Internal_RtnNGTSIndex(CThostFtdcNGTSIndexField *pNGTSIndex);

};

#endif
xiaohuh421 2013-09-27
  • 打赏
  • 举报
回复
能转到定义, VS经常有这个的错误. 一切都要以编译器为准, 它说没定义, 就是没定义. 我是 " Alt+G " "转到定义" 两个都用, 有时候一个失效的时候, 另一个能工作得很好.
内容概要:本文围绕“非线性流量的数据驱动Koopman模型预测控制研究”展开,提出一种基于数据驱动的Koopman算子理论方法,用于构建非线性系统的线性化状态空间模型,并结合模型预测控制(MPC)实现对复杂非线性系统的高效控制。研究通过引入扩展动态模态分解(EDMD)等观测函数,将非线性动力学映射至高维特征空间,在该空间中实现近似线性化表征,进而融合线性MPC框架进行优化求解。全文系统阐述了Koopman算子的数学基础、隐式线性化机制及在非线性流量控制中的建模流程,并通过Matlab代码完成了算法实现与仿真实验,验证了该方法在处理无精确物理模型、强非线性、变动态系统中的有效性与鲁棒性,尤其适用于工业流程控制、能源系统调度等实际工程场景。; 适合人群:具备自动控制理论、非线性系统分析基础,熟悉Matlab编程,从事控制工程、系统辨识、智能优化、能源系统建模等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于难以建立精确数学模型的复杂非线性系统(如流体动力系统、电力电子系统、机器人动力学等)的建模与实控制;②实现数据驱动下的模型预测控制,提升系统响应速度与控制精度;③为先进控制策略(如MPC)提供一种可行的线性化建模范式,推动现代控制理论与数据科学、机器学习的深度融合。; 阅读建议:建议读者结合提供的Matlab代码深入理解Koopman方法的具体实现过程,重点关注观测函数构造、核函数选择、矩阵逼近、降维处理及MPC控制器设计等关键技术环节,并尝试将其迁移至其他非线性系统中进行复现实验与性能对比,以全面掌握其适用范围与局限性。
内容概要:本文详细介绍了一种基于Simulink的光伏储能单相逆变器并网仿真模型,系统涵盖了光伏阵列、储能单元、DC-AC单相逆变器及并网接口的完整结构,重点实现了储能环节的能量管理与逆变器并网控制策略的建模仿真。通过Simulink平台构建系统模型,验证了逆变器输出电能质量、并网稳定性以及控制系统的动态响应性能,采用SPWM调制、PI闭环控制等关键技术,确保并网电流与电网电压同频同相,满足并网电能质量要求。该模型不仅可用于分布式能源系统的仿真研究,还可作为新能源并网技术的教学与工程实践工具。; 适合人群:电气工程、自动化、新能源科学与工程等相关专业的高校本科生、研究生、科研人员,以及从事光伏发电系统设计、储能控制与并网技术研发的工程技术人员。; 使用场景及目标:①深入理解光伏储能系统中能量转换、存储与并网控制的整体工作原理;②支持课程设计、毕业设计或科研项目中对单相逆变器控制策略(如SPWM、PI调节、锁相技术等)的仿真验证与参数优化;③为后续研究更复杂的控制算法(如MPPT、低电压穿越、谐波抑制等)提供可扩展的仿真基础平台。; 阅读建议:建议结合MATLAB/Simulink环境动手搭建与调试模型,逐步理解各模块(如光伏建模、储能充放电控制、逆变器驱动、锁相环、PI调节器等)的功能与交互关系,重点关注控制系统的设计逻辑与参数整定过程,并可通过修改负载条件或电网参数测试系统鲁棒性,为进一步拓展至三相系统或多机并网场景奠定基础。

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧