首页 > 解决方案 > 不能使用 typedef 枚举

问题描述

我有一个带有定义的头文件:

typedef enum acamera_metadata_enum_android_lens_facing {
// enumeration
} acamera_metadata_enum_android_lens_facing_t;

问题是当我试图将此枚举声明为我的类成员时,编译器找不到定义(找到标题)。

../../../../src/main/cpp/include/camera_manager.h:41:9: error: unknown type name 'acamera_metadata_enum_android_lens_facing_t'
          acamera_metadata_enum_android_lens_facing_t facing;

这是我的班级标题:

#ifndef DAVINCI_CAMERA_MANAGER_H
#define DAVINCI_CAMERA_MANAGER_H

#include <map>
#include <string>
#include <camera/NdkCameraManager.h>
#include <camera/NdkCameraError.h>
#include <camera/NdkCameraDevice.h>
#include <camera/NdkCameraMetadataTags.h> // The enumeration is defined here
#include <media/NdkImageReader.h>

namespace DaVinci {
    class CameraId;

    class CameraManager {
        struct ACameraManager *_manager;
        std::map<std::string, CameraId> _cameras;
        std::string _activeCameraId;

        int32_t _cameraFacing;
        int32_t _cameraOrientation;

        bool _valid;

    public:
        CameraManager();
        ~CameraManager();
    };

    // helper classes to hold enumerated camera
    class CameraId {
    public:
        struct ACameraDevice *device;
        std::string id;
        acamera_metadata_enum_android_lens_facing_t facing;
        bool available;  // free to use ( no other apps are using
        bool owner;      // we are the owner of the camera

        explicit CameraId(const char *id);
        explicit CameraId();
    };
};

#endif //DAVINCI_CAMERA_MANAGER_H

问题可能出在哪里?
PS如果它很重要,我正在使用c ++ 14。


更新我用我的项目创建了一个存储库:https : //bitbucket.org/ghostman2013/davinci_test

标签: androidc++android-ndkc++14android-camera2

解决方案


在您的项目中app/build.gradle,您已minSdkVersion设置为 21。

在 API 级别 24 中添加了本机相机 API 。

因此,您可以 A)将您的数量minSdkVersion增加到 24 或更高,或 B)不使用库中的本机相机 API。


推荐阅读