android - 类中未定义的函数
问题描述
我是 C++ 的初学者,无法获得类声明:
class NDKCamera {
private:
ACameraManager* cameraMgr_;
std::map<std::string, CameraId> cameras_;
std::string activeCameraId_;
uint32_t cameraFacing_;
uint32_t cameraOrientation_;
std::vector<CaptureRequestInfo> requests_;
ACaptureSessionOutputContainer* outputContainer_;
ACameraCaptureSession* captureSession_;
CaptureSessionState captureSessionState_;
// set up exposure control
int64_t exposureTime_;
RangeValue<int64_t> exposureRange_;
int32_t sensitivity_;
RangeValue<int32_t> sensitivityRange_;
volatile bool valid_;
ACameraManager_AvailabilityCallbacks* GetManagerListener();
ACameraDevice_stateCallbacks* GetDeviceListener();
ACameraCaptureSession_stateCallbacks* GetSessionListener();
ACameraCaptureSession_captureCallbacks* GetCaptureCallback();
public:
NDKCamera();
~NDKCamera();
void EnumerateCamera(void);
bool MatchCaptureSizeRequest(ANativeWindow* display, ImageFormat* view,
ImageFormat* capture);
void CreateSession(ANativeWindow* previewWindow, ANativeWindow* jpgWindow,
int32_t imageRotation);
bool GetSensorOrientation(int32_t* facing, int32_t* angle);
void OnCameraStatusChanged(const char* id, bool available);
void OnDeviceState(ACameraDevice* dev);
void OnDeviceError(ACameraDevice* dev, int err);
void OnSessionState(ACameraCaptureSession* ses, CaptureSessionState state);
void OnCaptureSequenceEnd(ACameraCaptureSession* session, int sequenceId,
int64_t frameNumber);
void OnCaptureFailed(ACameraCaptureSession* session, ACaptureRequest* request,
ACameraCaptureFailure* failure);
void StartPreview(bool start);
bool TakePhoto(void);
bool GetExposureRange(int64_t* min, int64_t* max, int64_t* curVal);
bool GetSensitivityRange(int64_t* min, int64_t* max, int64_t* curVal);
void UpdateCameraRequestParameter(int32_t code, int64_t val);
};
此类包含下一个函数的声明:
ACameraManager_AvailabilityCallbacks* GetManagerListener();
ACameraDevice_stateCallbacks* GetDeviceListener();
ACameraCaptureSession_stateCallbacks* GetSessionListener();
ACameraCaptureSession_captureCallbacks* GetCaptureCallback();
但是没有这些函数的定义。
使用此示例链接到存储库:https ://github.com/googlesamples/android-ndk/blob/master/camera/ 。
我自己的基于此代码的项目在构建时失败并显示消息:
/home/ghostman/Projects/Android/daVinci/app/src/main/cpp/src/camera_manager.cpp:37: error: undefined reference to 'DaVinci::CameraManager::GetDeviceListener()'
/home/ghostman/Projects/Android/daVinci/app/src/main/cpp/src/camera_manager.cpp:39: error: undefined reference to 'DaVinci::CameraManager::GetManagerListener()'
但我什至无法获得修复错误的代码。有人可以解释这些函数的定义在哪里吗?
解决方案
你app/src/main/cpp/src/camera_manager.cpp
显然有声明
namespace DaVinci { …
}
但是您应该将包含不在此命名空间内:
#include <camera/NdkCameraManager.h>
#include <camera/NdkCameraError.h>
#include <camera/NdkCameraDevice.h>
#include <camera/NdkCameraMetadataTags.h>
推荐阅读
- virtual-machine - 无法访问我家中但想从办公室访问的自托管虚拟服务器(Ubuntu 20.04)
- javascript - 对象文字、函数和 this
- flutter - 如何删除屏幕底部和底栏之间的底部空间?
- android - 在初始化 ArrayAdapter 时,我可以使用变量来代替调用数组的第二个参数的最后一部分吗?
- javascript - 如何对该数组的值进行排序?
- ruby - 在 Ruby 类中定义类方法和属性的正确方法
- python-3.x - collectstaic 命令失败给我后处理错误
- php - 无法使用 phpMyAdmin 访问 mysql 服务器
- python - 使用shell脚本运行python脚本时如何解决此错误
- r - 按 R 中具有等效值的列对数据进行子集