我从不使用mac或xcode,但我现在需要为osx和ios构建一个C ++库。 C ++代码可以很好地为windows和android构建,但是在xcode中我得到了数百个这些红色的激励标记图标,表明了这一点:
Semantic issue
cast from pointer to smaller type
'int' loses information
以下是表示此错误的一行代码示例
fixturesArray.push_back((int)fixture->GetUserData());
我已经在使用未使用的变量构建了一个问题,我删除了一个标志-Werror,这解决了这一特定问题。我能为这个问题做些什么吗?我假设问题是警告被视为错误。 这里还有其他标志......
-Wall -Wno-long-long -Wno-variadic-macros -DNDEBUG -DDEBUG=0
更新:该错误只有大约10个左右(其他100个事情都是警告)如果我改变了' int'到' int64'在所有这些情况下,我可以建立。但是我不想这样做,我确定它会导致问题,而不是程序应该如何工作。
UPDATE2:同样保留代码,只需删除这些标志即可构建 -Wno - 长 - 长
答案 0 :(得分:1)
此代码适用于windows,因为visual studio默认会创建32位二进制文件,而android是一个32位平台。在这些平台中,指针是32位,int
也是32位,因此可以将指针存储在int
类型的向量或变量中。
如果您定位Mac OS X,Xcode默认会构建64位和32位二进制文件,并且您收到的警告实际上是告诉您在64位平台上将指针放在int
内变量不是一个好主意,因为指针值的一半会丢失,并且您以后无法将其检索回来。
您可以在案例中追逐两种不同的解决方案:
int
更改为size_t
并修复因此而停止工作的任何内容。在第二种情况下,您可以通过更改xcode上的某些选项来禁用构建64位二进制文件并仅在mac os上使用32位二进制文件。为此,请从"有效架构中删除x86_64
字符串"设置目标"构建设置" (如果您无法找到该设置,请搜索谷歌图片xcode valid architectures build setting)
答案 1 :(得分:0)
好吧,似乎GetUserData()
返回一个指针。这似乎有一个sizeof(void*) > sizeof(int)
,所以铸造削减了一些东西
编辑:如果它适用于int64,这证实了我的假设(你似乎坐在64位机器前面)。我不确定你要做什么,但是对整数的指针是一个坏主意。我建议你让fixturesArray
成为一个合适的值类型的容器,如果你想让它更独立于架构工作。