当将纯C标头包含到Obj-C iOS项目中时,“对”的含义不明确”

濑津四郎

概括:

我遇到的错误是标题状态。我遇到对“”的引用是模棱两可的错误。我无法确定问题出在哪里,无论我的导入结构设置不正确,还是多次包含标头,还是没有。

由于要求和要求,我目前正在尝试在导入自定义纯C SDK时使用Objective-C和C构建单视图iOS应用程序。这是我第一次在iOS应用程序中使用C,更不用说包括整个SDK了,所以我不能100%确定我正在执行的过程是否正确,但是已经能够解决错误编译。

通过prefix.h包含SDK文件,该文件将导入到单个viewcontroller的标头中。我还在某处阅读了使用.pch而不是.h的信息,但是鉴于该项目的要求,我无法弄清楚该如何使用...

错误:

Reference to 'E_EXTERNAL_DEVICE_TYPE__CARD_ENTRY_DEVICE' is ambiguous.
  • “在... / ViewController.m中包含的文件中”-“在... / ViewController.h中包含的文件中”
  • “在... / prefix.h中包含的文件中”
  • “通过名称查找找到的候选人是'_E_EXTERNAL_DEVICE_TYPE__CARD_ENTRY_DEVICE'”
  • “通过名称查找找到的候选人是'_E_EXTERNAL_DEVICE_TYPE__CARD_ENTRY_DEVICE'”
  • “通过名称查找找到的候选人是'_E_EXTERNAL_DEVICE_TYPE__CARD_ENTRY_DEVICE'”
Reference to 'E_EXTERNAL_DEVICE_CONNECT_TYPE__BLUETOOTH' is ambiguous.
  • “在... / ViewController.m中包含的文件中”
  • “在... / ViewController.h中包含的文件中”
  • “在... / prefix.h中包含的文件中”
  • “通过名称查找找到的候选人是'_E_EXTERNAL_DEVICE_CONNECT_TYPE__BLUETOOTH'”
  • “通过名称查找找到的候选人是'_E_EXTERNAL_DEVICE_CONNECT_TYPE__BLUETOOTH'”
  • “通过名称查找找到的候选人是'_E_EXTERNAL_DEVICE_CONNECT_TYPE__BLUETOOTH'”

对“ E_EXTERNAL_DEVICE_TYPE__PRINTER”的引用不明确。

  • “在... / ViewController.m中包含的文件中”
  • “在... / ViewController.h中包含的文件中”
  • “在... / prefix.h中包含的文件中”
  • “通过名称查找找到的候选人是'_E_EXTERNAL_DEVICE_TYPE__PRINTER'”
  • “通过名称查找找到的候选人是'_E_EXTERNAL_DEVICE_TYPE__PRINTER'”
  • “通过名称查找找到的候选人是'_E_EXTERNAL_DEVICE_TYPE__PRINTER'”
// Device.c
...
// this and other similiar lines of code that throws the error
if((deviceType == E_EXTERNAL_DEVICE_TYPE__CARD_ENTRY_DEVICE) && E_EXTERNAL_DEVICE_CONNECT_TYPE__BLUETOOTH) {
  CODE x = E_EXTERNAL_DEVICE_TYPE__PRINTER;
}

尝试解决方案

奇怪的是,在我开始使用SDKInitialize的过程中,有一点我能够通过插入注释行和调试代码行来构建和运行项目的一部分。但是由于某种未知的原因,即使我已经在ViewController.m中注释了SDKInitialize(),使得它只是一个空的ViewController,却什么也不做,我现在还是收到此错误。

我还尝试过还原较旧的git版本,在该版本中项目可以正常构建,但是仍然遇到相同的错误,这可能使我相信这可能与XCode IDE或某种配置设置有关...

  1. 清理过的项目
  2. 删除了“〜/ Library / Developer / Xcode / DerivedData / ModuleCache /”中的所有内容
  3. 再次清洁
  4. 建立专案

已检查

构建设置

我尝试设置设置always_search_user_paths = No;

Always Search User Paths = Yes;  
Header Search Paths[$(PROJECT_DIR)/.../.../.../SDK/Common] = recursive;  
Header Search Paths[$(PROJECT_DIR)/.../.../.../SDK/Core] = recursive;  
Header Search Paths[$(PROJECT_DIR)/.../.../.../GenericAppRoot] = non-recursive;  
... etc

仅供参考app.xcodeproj存在于___ / GenericAppRoot / Devices / iOS内部

档案结构

普通

//located in $(PROJECT_DIR)/.../.../.../SDK/Common
//Common.h
#ifndef __DTISDK_COMMON_H__
#define __DTISDK_COMMON_H__

//--------
// SDK Includes
//--------

//...

//--------------
// External Device Types
//--------------
typedef enum _E_EXTERNAL_DEVICE_TYPE
{
  E_EXTERNAL_DEVICE_TYPE__PRINTER = 1,
  E_EXTERNAL_DEVICE_TYPE__CARD_ENTRY_DEVICE = 2,
  E_EXTERNAL_DEVICE_TYPE__PIN_ENTRY_DEVICE = 3,
} E_EXTERNAL_DEVICE_TYPE;

//...

typedef enum _E_EXTERNAL_DEVICE_CONNECTION_TYPE
{
  E_EXTERNAL_DEVICE_CONNECT_TYPE__AUDIO = 1,
  E_EXTERNAL_DEVICE_CONNECT_TYPE__BLUETOOTH = 2,
} E_EXTERNAL_DEVICE_CONNECTION_TYPE;

//...

#endif //__DTISDK_COMMON_H__

前缀

#ifndef prefix_h
#define prefix_h

#include "File.h"
#include "File.c"
#include "System.h"
#include "System.c"
#include "Common.h"
... etc

ViewController.h

#import <UIKit/UIKit.h>
#import "prefix.h"

@interface ViewController: UIViewController

@end

ViewController.m

#import "ViewController.h"
@interface ViewController()
@end

@implementation ViewController
- (void) viewDidLoad {
  [super viewDidLoad];

  // initialization callback from one of the SDK classes
  SDKInitialize();
}
@end

任何其他帮助或见解将不胜感激

苏尔坦

您包括错误的*.c文件prefix.h始终仅包含头文件(*.h)。

当包含实现(*.c)文件时,文件的内容将按原样插入,因此,您会在多个位置获得相同的定义,从而导致名称冲突。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法将Objective C文件包含到项目中吗?

来自分类Dev

如何正确地将 C++ 静态库包含到 iOS 项目中

来自分类Dev

Qt项目C2872错误,生成的ui文件中的符号不明确

来自分类Dev

填充std :: map时,“ C2593:运算符=不明确”

来自分类Dev

尝试编译 C++ 代码时出现不明确的错误

来自分类Dev

通过Obj-C桥接标头将sqlite3.h导入Swift项目不起作用

来自分类Dev

通过Obj-C桥接标头将sqlite3.h导入Swift项目不起作用

来自分类Dev

C ++标头包含

来自分类Dev

C ++重载解析度不明确-GCC

来自分类Dev

C ++:Armadillo列矩阵初始化不明确

来自分类Dev

C2594:与COM对象的不明确转换

来自分类Dev

C ++为什么调用不明确?

来自分类Dev

错误:对成员的请求不明确c ++;

来自分类Dev

C2594:与COM对象的不明确转换

来自分类Dev

C ++:Armadillo列矩阵初始化不明确

来自分类Dev

C++ 多态:是否允许不明确的成员类型?

来自分类Dev

如何使用CMake将外部库(增强型)包含到CLion C ++项目中?

来自分类Dev

按条件将文件包含到 VS2017 c++ 项目中

来自分类Dev

使用python编译pin工具时出错,并得到错误C2872:'UINT32':不明确的符号

来自分类Dev

重载字符向量和字符串C ++时对成员函数的调用不明确

来自分类Dev

C# 使用动态 lambda 但在选择要使用的方法时得到不明确的匹配

来自分类Dev

项目之间的C ++标头

来自分类Dev

如何#在C ++ / CLI项目中包含使用nullptr的第三方本机C ++标头

来自分类Dev

在C ++中包含标头

来自分类Dev

Xcode 11 Objective C ++-无法将实现与ObjectiveC ++项目中的标头分开

来自分类Dev

将 Boost 标头包含到 .h 文件中但不包含在 .cpp 文件中时发生错误

来自分类Dev

当两次包含相同的标头时,Visual Studio Intellisense + Resharper 会抛出不明确的符号错误

来自分类Dev

尝试将Lua标头导入C ++项目时出现链接器错误?

来自分类Dev

如何在C#中解析不明确的枚举值?

Related 相关文章

  1. 1

    无法将Objective C文件包含到项目中吗?

  2. 2

    如何正确地将 C++ 静态库包含到 iOS 项目中

  3. 3

    Qt项目C2872错误,生成的ui文件中的符号不明确

  4. 4

    填充std :: map时,“ C2593:运算符=不明确”

  5. 5

    尝试编译 C++ 代码时出现不明确的错误

  6. 6

    通过Obj-C桥接标头将sqlite3.h导入Swift项目不起作用

  7. 7

    通过Obj-C桥接标头将sqlite3.h导入Swift项目不起作用

  8. 8

    C ++标头包含

  9. 9

    C ++重载解析度不明确-GCC

  10. 10

    C ++:Armadillo列矩阵初始化不明确

  11. 11

    C2594:与COM对象的不明确转换

  12. 12

    C ++为什么调用不明确?

  13. 13

    错误:对成员的请求不明确c ++;

  14. 14

    C2594:与COM对象的不明确转换

  15. 15

    C ++:Armadillo列矩阵初始化不明确

  16. 16

    C++ 多态:是否允许不明确的成员类型?

  17. 17

    如何使用CMake将外部库(增强型)包含到CLion C ++项目中?

  18. 18

    按条件将文件包含到 VS2017 c++ 项目中

  19. 19

    使用python编译pin工具时出错,并得到错误C2872:'UINT32':不明确的符号

  20. 20

    重载字符向量和字符串C ++时对成员函数的调用不明确

  21. 21

    C# 使用动态 lambda 但在选择要使用的方法时得到不明确的匹配

  22. 22

    项目之间的C ++标头

  23. 23

    如何#在C ++ / CLI项目中包含使用nullptr的第三方本机C ++标头

  24. 24

    在C ++中包含标头

  25. 25

    Xcode 11 Objective C ++-无法将实现与ObjectiveC ++项目中的标头分开

  26. 26

    将 Boost 标头包含到 .h 文件中但不包含在 .cpp 文件中时发生错误

  27. 27

    当两次包含相同的标头时,Visual Studio Intellisense + Resharper 会抛出不明确的符号错误

  28. 28

    尝试将Lua标头导入C ++项目时出现链接器错误?

  29. 29

    如何在C#中解析不明确的枚举值?

热门标签

归档