Compile Bug

已关闭
#1,187 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
35/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
停滞
技术栈
cpp
领域
compilers

调研方向

首先检查报告错误行处生成的头文件 LoggerEvent.h、LogLevel.h、SFSEvent.h、Console.h 和 lime/media/OpenALAudioContext.h,然后将它们与 issue 中生成的 OpenALAudioContext 代码进行比较。重现 Windows 编译失败,并确定哪个生成的声明导致了 MSVC 的语法错误;受影响的头文件能够成功编译即表示完成。

由索引模型根据 Issue 内容生成。

描述

When I define the CURL Extern, the code does not compile.

Extern Code:

package curl.extern;
import cpp.CastCharStar;

@:keep
@:include('curl/curl.h')
@:build(curl.linc.Linc.touch())
@:build(curl.linc.Linc.xml('curl'))
extern class ExternCURL {
	@:native("curl_easy_init")
	public static function easy_init():cpp.Star<CURLHandle>;

	@:native("curl_easy_duphandle")
	public static function easy_duphandle(handle:cpp.Star<CURLHandle>):cpp.Star<CURLHandle>;

	@:native("curl_easy_escape")
	public static function easy_escape(handle:cpp.Star<CURLHandle>, string:cpp.ConstCharStar, length:Int):cpp.ConstCharStar;

	@:native("curl_getdate")
	public static function getdate(string:cpp.ConstCharStar, now:AbstractStar<TimeT>):TimeT;

	// CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
	@:native("curl_easy_setopt")
	public static function easy_setopt_function<T>(handle:cpp.Star<CURLHandle>, option:CURLOption, parameter:T):CURLCode;

	@:native("curl_easy_setopt")
	public static function easy_setopt_string(handle:cpp.Star<CURLHandle>, option:CURLOption, parameter:CastCharStar):CURLCode;

	@:native("curl_easy_setopt")
	public static function easy_setopt<T, K>(handle:cpp.Star<CURLHandle>, option:CURLOption, parameter:T, ?bytes:K):CURLCode;

	@:native("curl_easy_perform")
	public static function easy_perform(handle:cpp.Star<CURLHandle>):CURLCode;

	@:native("curl_easy_reset")
	public static function easy_reset(handle:cpp.Star<CURLHandle>):Void;

	@:native("curl_global_cleanup")
	public static function global_cleanup():Void;

	@:native("curl_global_init")
	public static function global_init(flags:Int):CURLCode;

	@:native("curl_easy_cleanup")
	public static function easy_cleanup(handle:cpp.Star<CURLHandle>):Int;

	@:native("curl_easy_pause")
	public static function easy_pause(handle:cpp.Star<CURLHandle>, mask:Int):CURLCode;

	@:native("curl_easy_strerror")
	public static function easy_strerror(errornum:CURLCode):cpp.ConstCharStar;

	@:native("curl_easy_unescape")
	public static function easy_unescape(handle:cpp.Star<CURLHandle>, input:cpp.ConstCharStar, inlength:Int, outlength:AbstractStar<Int>):cpp.ConstCharStar;

	@:native("curl_version")
	public static function version():cpp.ConstCharStar;
}

Error:

D:\App\Export\windows\obj\include\com/smartfoxserver/v2/logging/LoggerEvent.h(54): error C2059: syntax error: 'constant'
D:\App\Export\windows\obj\include\com/smartfoxserver/v2/logging/LoggerEvent.h(54): error C2238: unexpected token(s) preceding ';'
D:\App\Export\windows\obj\include\com/smartfoxserver/v2/logging/LogLevel.h(60): error C2059: syntax error: 'constant'
D:\App\Export\windows\obj\include\com/smartfoxserver/v2/logging/LogLevel.h(60): error C2238: unexpected token(s) preceding ';'
D:\App\Export\windows\obj\include\com/smartfoxserver/v2/core/SFSEvent.h(61): error C2059: syntax error: '-'
D:\App\Export\windows\obj\include\com/smartfoxserver/v2/core/SFSEvent.h(61): error C2238: unexpected token(s) preceding ';'
D:\App\Export\windows\obj\include\com/junkbyte/console/Console.h(84): error C2059: syntax error: 'constant'
D:\App\Export\windows\obj\include\com/junkbyte/console/Console.h(84): error C2238: unexpected token(s) preceding ';'
D:\App\Export\windows\obj\include\lime/media/OpenALAudioContext.h(47): error C2059: syntax error: 'constant'
D:\App\Export\windows\obj\include\lime/media/OpenALAudioContext.h(47): error C2238: unexpected token(s) preceding ';'
D:\App\Export\windows\obj\include\lime/media/OpenALAudioContext.h(48): error C2059: syntax error: 'constant'
D:\App\Export\windows\obj\include\lime/media/OpenALAudioContext.h(48): error C2238: unexpected token(s) preceding ';'
D:\App\Export\windows\obj\include\lime/media/OpenALAudioContext.h(88): error C2059: syntax error: 'constant'
D:\App\Export\windows\obj\include\lime/media/OpenALAudioContext.h(88): error C2238: unexpected token(s) preceding ';'

But nothing seems to be wrong with the generated code.

Screenshot of error line:
Image

Full Code:

// Generated by Haxe 4.3.6
#ifndef INCLUDED_lime_media_OpenALAudioContext
#define INCLUDED_lime_media_OpenALAudioContext

#ifndef HXCPP_H
#include <hxcpp.h>
#endif

HX_DECLARE_CLASS2(lime,media,OpenALAudioContext)
HX_DECLARE_CLASS2(lime,utils,ArrayBufferView)

namespace lime{
namespace media{


class HXCPP_CLASS_ATTRIBUTES OpenALAudioContext_obj : public ::hx::Object
{
	public:
		typedef ::hx::Object super;
		typedef OpenALAudioContext_obj OBJ_;
		OpenALAudioContext_obj();

	public:
		enum { _hx_ClassId = 0x1531d04d };

		void __construct();
		inline void *operator new(size_t inSize, bool inContainer=false,const char *inName="lime.media.OpenALAudioContext")
			{ return ::hx::Object::operator new(inSize,inContainer,inName); }
		inline void *operator new(size_t inSize, int extra)
			{ return ::hx::Object::operator new(inSize+extra,false,"lime.media.OpenALAudioContext"); }
		static ::hx::ObjectPtr< OpenALAudioContext_obj > __new();
		static ::hx::ObjectPtr< OpenALAudioContext_obj > __alloc(::hx::Ctx *_hx_ctx);
		static void * _hx_vtable;
		static Dynamic __CreateEmpty();
		static Dynamic __Create(::hx::DynamicArray inArgs);
		//~OpenALAudioContext_obj();

		HX_DO_RTTI_ALL;
		::hx::Val __Field(const ::String &inString, ::hx::PropertyAccess inCallProp);
		::hx::Val __SetField(const ::String &inString,const ::hx::Val &inValue, ::hx::PropertyAccess inCallProp);
		void __GetFields(Array< ::String> &outFields);
		static void __register();
		bool _hx_isInstanceOf(int inClassId);
		::String __ToString() const { return HX_("OpenALAudioContext",ae,da,cd,a1); }

		int NONE;
		int FALSE;
		int TRUE;
		int SOURCE_RELATIVE;
		int CONE_INNER_ANGLE;
		int CONE_OUTER_ANGLE;
		int PITCH;
		int POSITION;
		int DIRECTION;
		int VELOCITY;
		int LOOPING;
		int BUFFER;
		int GAIN;
		int MIN_GAIN;
		int MAX_GAIN;
		int ORIENTATION;
		int SOURCE_STATE;
		int INITIAL;
		int PLAYING;
		int PAUSED;
		int STOPPED;
		int BUFFERS_QUEUED;
		int BUFFERS_PROCESSED;
		int REFERENCE_DISTANCE;
		int ROLLOFF_FACTOR;
		int CONE_OUTER_GAIN;
		int MAX_DISTANCE;
		int SEC_OFFSET;
		int SAMPLE_OFFSET;
		int BYTE_OFFSET;
		int SOURCE_TYPE;
		int STATIC;
		int STREAMING;
		int UNDETERMINED;
		int FORMAT_MONO8;
		int FORMAT_MONO16;
		int FORMAT_STEREO8;
		int FORMAT_STEREO16;
		int FREQUENCY;
		int BITS;
		int CHANNELS;
		int SIZE;
		int NO_ERROR;
		int INVALID_NAME;
		int INVALID_ENUM;
		int INVALID_VALUE;
		int INVALID_OPERATION;
		int OUT_OF_MEMORY;
		int VENDOR;
		int VERSION;
		int RENDERER;
		int EXTENSIONS;
		int DOPPLER_FACTOR;
		int SPEED_OF_SOUND;
		int DOPPLER_VELOCITY;
		int DISTANCE_MODEL;
		int INVERSE_DISTANCE;
		int INVERSE_DISTANCE_CLAMPED;
		int LINEAR_DISTANCE;
		int LINEAR_DISTANCE_CLAMPED;
		int EXPONENT_DISTANCE;
		int EXPONENT_DISTANCE_CLAMPED;
		int REFRESH;
		int SYNC;
		int MONO_SOURCES;
		int STEREO_SOURCES;
		int INVALID_DEVICE;
		int INVALID_CONTEXT;
		int ATTRIBUTES_SIZE;
		int ALL_ATTRIBUTES;
		int DEFAULT_DEVICE_SPECIFIER;
		int DEVICE_SPECIFIER;
		int ENUMERATE_ALL_EXT;
		int DEFAULT_ALL_DEVICES_SPECIFIER;
		int ALL_DEVICES_SPECIFIER;
		void bufferData( ::Dynamic buffer,int format, ::lime::utils::ArrayBufferView data,int size,int freq);
		::Dynamic bufferData_dyn();

		void buffer3f( ::Dynamic buffer,int param,Float value1,Float value2,Float value3);
		::Dynamic buffer3f_dyn();

		void buffer3i( ::Dynamic buffer,int param,int value1,int value2,int value3);
		::Dynamic buffer3i_dyn();

		void bufferf( ::Dynamic buffer,int param,Float value);
		::Dynamic bufferf_dyn();

		void bufferfv( ::Dynamic buffer,int param,::Array< Float > values);
		::Dynamic bufferfv_dyn();

		void bufferi( ::Dynamic buffer,int param,int value);
		::Dynamic bufferi_dyn();

		void bufferiv( ::Dynamic buffer,int param,::Array< int > values);
		::Dynamic bufferiv_dyn();

		bool closeDevice( ::Dynamic device);
		::Dynamic closeDevice_dyn();

		 ::Dynamic createContext( ::Dynamic device,::Array< int > attrlist);
		::Dynamic createContext_dyn();

		 ::Dynamic createBuffer();
		::Dynamic createBuffer_dyn();

		 ::Dynamic createSource();
		::Dynamic createSource_dyn();

		void deleteBuffer( ::Dynamic buffer);
		::Dynamic deleteBuffer_dyn();

		void deleteBuffers(::cpp::VirtualArray buffers);
		::Dynamic deleteBuffers_dyn();

		void deleteSource( ::Dynamic source);
		::Dynamic deleteSource_dyn();

		void deleteSources(::cpp::VirtualArray sources);
		::Dynamic deleteSources_dyn();

		void destroyContext( ::Dynamic context);
		::Dynamic destroyContext_dyn();

		void disable(int capability);
		::Dynamic disable_dyn();

		void distanceModel(int distanceModel);
		::Dynamic distanceModel_dyn();

		void dopplerFactor(Float value);
		::Dynamic dopplerFactor_dyn();

		void dopplerVelocity(Float value);
		::Dynamic dopplerVelocity_dyn();

		void enable(int capability);
		::Dynamic enable_dyn();

		 ::Dynamic genSource();
		::Dynamic genSource_dyn();

		::cpp::VirtualArray genSources(int n);
		::Dynamic genSources_dyn();

		 ::Dynamic genBuffer();
		::Dynamic genBuffer_dyn();

		::cpp::VirtualArray genBuffers(int n);
		::Dynamic genBuffers_dyn();

		bool getBoolean(int param);
		::Dynamic getBoolean_dyn();

		::Array< bool > getBooleanv(int param,::hx::Null< int >  count);
		::Dynamic getBooleanv_dyn();

		::Array< Float > getBuffer3f( ::Dynamic buffer,int param);
		::Dynamic getBuffer3f_dyn();

		::Array< int > getBuffer3i( ::Dynamic buffer,int param);
		::Dynamic getBuffer3i_dyn();

		Float getBufferf( ::Dynamic buffer,int param);
		::Dynamic getBufferf_dyn();

		::Array< Float > getBufferfv( ::Dynamic buffer,int param,::hx::Null< int >  count);
		::Dynamic getBufferfv_dyn();

		int getBufferi( ::Dynamic buffer,int param);
		::Dynamic getBufferi_dyn();

		::Array< int > getBufferiv( ::Dynamic buffer,int param,::hx::Null< int >  count);
		::Dynamic getBufferiv_dyn();

		 ::Dynamic getContextsDevice( ::Dynamic context);
		::Dynamic getContextsDevice_dyn();

		 ::Dynamic getCurrentContext();
		::Dynamic getCurrentContext_dyn();

		Float getDouble(int param);
		::Dynamic getDouble_dyn();

		::Array< Float > getDoublev(int param,::hx::Null< int >  count);
		::Dynamic getDoublev_dyn();

		int getEnumValue(::String ename);
		::Dynamic getEnumValue_dyn();

		int getError( ::Dynamic device);
		::Dynamic getError_dyn();

		::String getErrorString( ::Dynamic device);
		::Dynamic getErrorString_dyn();

		Float getFloat(int param);
		::Dynamic getFloat_dyn();

		::Array< Float > getFloatv(int param,::hx::Null< int >  count);
		::Dynamic getFloatv_dyn();

		int getInteger(int param);
		::Dynamic getInteger_dyn();

		::Array< int > getIntegerv(int param,::hx::Null< int >  count, ::Dynamic device);
		::Dynamic getIntegerv_dyn();

		::Array< Float > getListener3f(int param);
		::Dynamic getListener3f_dyn();

		::Array< int > getListener3i(int param);
		::Dynamic getListener3i_dyn();

		Float getListenerf(int param);
		::Dynamic getListenerf_dyn();

		::Array< Float > getListenerfv(int param,::hx::Null< int >  count);
		::Dynamic getListenerfv_dyn();

		int getListeneri(int param);
		::Dynamic getListeneri_dyn();

		::Array< int > getListeneriv(int param,::hx::Null< int >  count);
		::Dynamic getListeneriv_dyn();

		 ::Dynamic getProcAddress(::String fname);
		::Dynamic getProcAddress_dyn();

		::Array< Float > getSource3f( ::Dynamic source,int param);
		::Dynamic getSource3f_dyn();

		Float getSourcef( ::Dynamic source,int param);
		::Dynamic getSourcef_dyn();

		::Array< int > getSource3i( ::Dynamic source,int param);
		::Dynamic getSource3i_dyn();

		::Array< Float > getSourcefv( ::Dynamic source,int param,::hx::Null< int >  count);
		::Dynamic getSourcefv_dyn();

		 ::Dynamic getSourcei( ::Dynamic source,int param);
		::Dynamic getSourcei_dyn();

		::Array< int > getSourceiv( ::Dynamic source,int param,::hx::Null< int >  count);
		::Dynamic getSourceiv_dyn();

		::String getString(int param, ::Dynamic device);
		::Dynamic getString_dyn();

		bool isBuffer( ::Dynamic buffer);
		::Dynamic isBuffer_dyn();

		bool isEnabled(int capability);
		::Dynamic isEnabled_dyn();

		bool isExtensionPresent(::String extname);
		::Dynamic isExtensionPresent_dyn();

		bool isSource( ::Dynamic source);
		::Dynamic isSource_dyn();

		void listener3f(int param,Float value1,Float value2,Float value3);
		::Dynamic listener3f_dyn();

		void listener3i(int param,int value1,int value2,int value3);
		::Dynamic listener3i_dyn();

		void listenerf(int param,Float value);
		::Dynamic listenerf_dyn();

		void listenerfv(int param,::Array< Float > values);
		::Dynamic listenerfv_dyn();

		void listeneri(int param,int value);
		::Dynamic listeneri_dyn();

		void listeneriv(int param,::Array< int > values);
		::Dynamic listeneriv_dyn();

		bool makeContextCurrent( ::Dynamic context);
		::Dynamic makeContextCurrent_dyn();

		 ::Dynamic openDevice(::String deviceName);
		::Dynamic openDevice_dyn();

		void pauseDevice( ::Dynamic device);
		::Dynamic pauseDevice_dyn();

		void processContext( ::Dynamic context);
		::Dynamic processContext_dyn();

		void resumeDevice( ::Dynamic device);
		::Dynamic resumeDevice_dyn();

		void source3f( ::Dynamic source,int param,Float value1,Float value2,Float value3);
		::Dynamic source3f_dyn();

		void source3i( ::Dynamic source,int param,int value1,int value2,int value3);
		::Dynamic source3i_dyn();

		void sourcef( ::Dynamic source,int param,Float value);
		::Dynamic sourcef_dyn();

		void sourcefv( ::Dynamic source,int param,::Array< Float > values);
		::Dynamic sourcefv_dyn();

		void sourcei( ::Dynamic source,int param, ::Dynamic value);
		::Dynamic sourcei_dyn();

		void sourceiv( ::Dynamic source,int param,::Array< int > values);
		::Dynamic sourceiv_dyn();

		void sourcePlay( ::Dynamic source);
		::Dynamic sourcePlay_dyn();

		void sourcePlayv(::cpp::VirtualArray sources);
		::Dynamic sourcePlayv_dyn();

		void sourceStop( ::Dynamic source);
		::Dynamic sourceStop_dyn();

		void sourceStopv(::cpp::VirtualArray sources);
		::Dynamic sourceStopv_dyn();

		void sourceRewind( ::Dynamic source);
		::Dynamic sourceRewind_dyn();

		void sourceRewindv(::cpp::VirtualArray sources);
		::Dynamic sourceRewindv_dyn();

		void sourcePause( ::Dynamic source);
		::Dynamic sourcePause_dyn();

		void sourcePausev(::cpp::VirtualArray sources);
		::Dynamic sourcePausev_dyn();

		void sourceQueueBuffer( ::Dynamic source, ::Dynamic buffer);
		::Dynamic sourceQueueBuffer_dyn();

		void sourceQueueBuffers( ::Dynamic source,int nb,::cpp::VirtualArray buffers);
		::Dynamic sourceQueueBuffers_dyn();

		 ::Dynamic sourceUnqueueBuffer( ::Dynamic source);
		::Dynamic sourceUnqueueBuffer_dyn();

		::cpp::VirtualArray sourceUnqueueBuffers( ::Dynamic source,int nb);
		::Dynamic sourceUnqueueBuffers_dyn();

		void speedOfSound(Float value);
		::Dynamic speedOfSound_dyn();

		void suspendContext( ::Dynamic context);
		::Dynamic suspendContext_dyn();

};

} // end namespace lime
} // end namespace media

#endif /* INCLUDED_lime_media_OpenALAudioContext */ 

主要语言
C++
星标
330
派生
233
平均合并
7 小时 13 分钟
30 天内合并 PR
17

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

HaxeFoundation/hxcpp 的其他 Issue

查看 HaxeFoundation/hxcpp 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。