Skill 126 · Zoom Meeting SDK Windows
Subchapter 126.21
troubleshooting/build-errors.mdMarkdown11 KBView on GitHub
The Zoom Windows SDK has several header dependency bugs that cause compilation errors. This guide covers the most common issues and their solutions.
Error C2061: syntax error: identifier 'uint32_t'
Error C3646: 'GetAudioJoinType': unknown override specifier
Error C2059: syntax error: ')'
Error C2238: unexpected token(s) preceding ';'Errors occur in SDK headers:
rawdata/rawdata_renderer_interface.h (lines 57, 65)meeting_service_components/meeting_participants_ctrl_interface.h (line 139)The SDK headers use uint32_t but don’t include <cstdint> where it’s defined.
Add #include <cstdint> to ALL your header files, right after <windows.h>:
// YourListener.h
#pragma once
#include <windows.h>
#include <cstdint> // CRITICAL: Must come before SDK headers!
#include <auth_service_interface.h>Required in:
.h files that include SDK headersmain.cpp or any .cpp that includes SDK headers directly// 1. Windows header FIRST
#include <windows.h>
// 2. Standard int types SECOND (for uint32_t)
#include <cstdint>
// 3. Other standard headers
#include <iostream>
#include <vector>
// 4. Zoom SDK headers LAST
#include <zoom_sdk.h>
#include <meeting_service_interface.h>This order is MANDATORY and must be followed in every file!
Error C3646: 'GetAudioJoinType': unknown override specifier
Error C2059: syntax error: ')'Error occurs when including:
#include <meeting_service_components/meeting_participants_ctrl_interface.h>meeting_participants_ctrl_interface.h uses AudioType enum (line 139) but doesn’t include meeting_audio_interface.h where AudioType is defined.
Include meeting_audio_interface.h BEFORE meeting_participants_ctrl_interface.h:
// Correct order
#include <meeting_service_components/meeting_audio_interface.h> // FIRST
#include <meeting_service_components/meeting_participants_ctrl_interface.h> // SECONDWrong order will fail:
// ❌ This will cause errors!
#include <meeting_service_components/meeting_participants_ctrl_interface.h>
#include <meeting_service_components/meeting_audio_interface.h>Error: use of undefined type 'YUVRawDataI420'
Error: incomplete type is not allowedrawdata/rawdata_renderer_interface.h only forward-declares YUVRawDataI420:
class YUVRawDataI420; // Forward declaration only!The full class definition is in zoom_sdk_raw_data_def.h.
Include zoom_sdk_raw_data_def.h in your renderer delegate header:
// YourRendererDelegate.h
#pragma once
#include <windows.h>
#include <cstdint>
#include <rawdata/rawdata_renderer_interface.h>
#include <zoom_sdk_raw_data_def.h> // Full YUVRawDataI420 definitionError C2259: 'MeetingServiceEventListener': cannot instantiate abstract class
Error: pure virtual function "IMeetingServiceEvent::onUserNetworkStatusChanged" has no overrider
Error: pure virtual function "IMeetingServiceEvent::onAppSignalPanelUpdated" has no overriderMissing implementation of pure virtual methods (methods marked with = 0) required by SDK interfaces.
Implement ALL pure virtual methods from the SDK interface.
For IMeetingServiceEvent (SDK v6.7.2.26830):
class MyMeetingListener : public IMeetingServiceEvent {
public:
// Required by ALL versions
void onMeetingStatusChanged(MeetingStatus status, int iResult) override;
void onMeetingStatisticsWarningNotification(StatisticsWarningType type) override;
void onMeetingParameterNotification(const MeetingParameter* param) override;
void onSuspendParticipantsActivities() override;
void onAICompanionActiveChangeNotice(bool isActive) override;
void onMeetingTopicChanged(const zchar_t* sTopic) override;
void onMeetingFullToWatchLiveStream(const zchar_t* sLiveStreamUrl) override;
void onUserNetworkStatusChanged(MeetingComponentType type, ConnectionQuality level,
unsigned int userId, bool uplink) override;
// Required when WIN32 is defined
#if defined(WIN32)
void onAppSignalPanelUpdated(IMeetingAppSignalHandler* pHandler) override;
#endif
};meeting_service_interface.h)class IMeetingServiceEvent)= 0 (pure virtual)Example from SDK header:
class IMeetingServiceEvent {
public:
virtual void onMeetingStatusChanged(...) = 0; // Must implement!
virtual void onMeetingStatisticsWarningNotification(...) = 0; // Must implement!
// ... etc
};Error C3668: method with override specifier 'override' did not override any base class methodsMethod signature doesn’t exactly match the base class, or the method doesn’t exist in the SDK interface (usually due to conditional compilation).
Check for conditional compilation:
// ❌ Wrong: Will fail if WIN32 is not defined
void onNotificationServiceStatus(...) override;
// ✅ Correct: Match SDK's conditional compilation
#if defined(WIN32)
void onNotificationServiceStatus(...) override;
#endifVerify method signature matches exactly:
const qualifiers must match// main.cpp
#include <windows.h>
#include <cstdint>
#include <iostream>
#include <fstream>
#include <string>
#include <thread>
#include <chrono>
// Zoom SDK headers - ORDER MATTERS!
#include <zoom_sdk.h>
#include <auth_service_interface.h>
#include <meeting_service_interface.h>
#include <meeting_service_components/meeting_recording_interface.h>
#include <meeting_service_components/meeting_audio_interface.h> // BEFORE participants!
#include <meeting_service_components/meeting_participants_ctrl_interface.h>
#include <rawdata/zoom_rawdata_api.h>
#include <rawdata/rawdata_renderer_interface.h>
// Third-party libraries
#include <json/json.h>
// Your headers
#include "AuthServiceEventListener.h"
#include "MeetingServiceEventListener.h"
#include "ZoomSDKRendererDelegate.h"// AuthServiceEventListener.h
#pragma once
#include <windows.h>
#include <cstdint>
#include <auth_service_interface.h>
#include <iostream>
using namespace ZOOM_SDK_NAMESPACE;
class AuthServiceEventListener : public IAuthServiceEvent {
public:
// ... methods ...
};// ZoomSDKRendererDelegate.h
#pragma once
#include <windows.h>
#include <cstdint>
#include <rawdata/rawdata_renderer_interface.h>
#include <zoom_sdk_raw_data_def.h>
#include <fstream>
#include <iostream>
using namespace ZOOM_SDK_NAMESPACE;
class ZoomSDKRendererDelegate : public IZoomSDKRendererDelegate {
public:
// ... methods ...
};For correct SDK interface behavior, define WIN32 in project settings:
Visual Studio .vcxproj:
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>CMake:
target_compile_definitions(YourTarget PRIVATE WIN32)Why: SDK uses #if defined(WIN32) to conditionally include platform-specific methods. Without it, you’ll miss required methods or have methods that don’t exist in the interface.
When you get build errors:
<windows.h> the FIRST include?<cstdint> included after <windows.h> in ALL headers?<cstdint> included BEFORE any SDK headers?meeting_audio_interface.h included before meeting_participants_ctrl_interface.h?zoom_sdk_raw_data_def.h included for raw data delegates?WIN32 defined in preprocessor definitions?const)?#if defined(WIN32)) handled correctly?→ Missing include for header that defines X
→ Wrong include order (SDK header before <cstdint>)
→ Type used in method signature is undefined → Usually means missing include or wrong include order
→ Missing pure virtual method implementation
→ Check SDK header for ALL methods with = 0
→ Only forward declaration available → Need to include header with full definition
→ Method doesn’t exist in interface (check conditional compilation) → Method signature doesn’t match exactly
SDK versions may have different required methods. Always check your specific SDK version’s headers.
To check required methods:
# Search for pure virtual methods in interface
grep "= 0" SDK/x64/h/meeting_service_interface.hSDK v6.7.2.26830 requirements:
IMeetingServiceEvent: 9 methods (8 + 1 WIN32-specific)IAuthServiceEvent: 6 methods (5 + 1 WIN32-specific)IZoomSDKRendererDelegate: 3 methodsWhen building from git bash on Windows, use this invocation pattern:
# Git bash requires unix-style path for the exe and //p: (double slash) for switches
"/c/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe" \
"C:\tempsdk\zoom-windows-sdk-sample\ZoomSDKSample.vcxproj" \
//p:Configuration=Release //p:Platform=x64Key gotchas:
/c/Program Files/...)//p: not /p: — git bash interprets single /p as a path//t:Rebuild for clean rebuilds.vcxproj path can use either forward or backslashesFrom cmd.exe / PowerShell (normal Windows paths):
"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe" ^
ZoomSDKSample.vcxproj /p:Configuration=Release /p:Platform=x64