c++ - 尝试在 C++ 项目中使用 Metal 时出现“未知类型名称‘NSString’”错误(vs code,mac m1)
问题描述
如标题所示,我从包括 NSObjCRuntime.h、NSObject.h 和 NSZone.h 在内的文件中收到许多“未知类型名称 'NSString'”错误。然后我加了
#include <Foundation/NSString.h>
到 main.cpp 文件,但错误仍然存在。
c_cpp_properties.json
{
"configurations": [
{
"name": "Mac",
"includePath": [
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1",
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/12.0.0/include",
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include",
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks",
"/opt/homebrew/include",
"${workspaceFolder}/**"
],
"defines": [],
"macFrameworkPath": [],
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "macos-clang-arm"
}
],
"version": 4
}
任务.json
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: clang++ build active file",
"command": "/usr/bin/clang++",
"args": [
"-g",
"${file}",
"-I:/opt/homebrew/include",
"-I:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1",
"-I:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/12.0.0/include",
"-I:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include",
"-I:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include",
"-I:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
main.cpp 的“包含”部分
#include <Foundation/NSString.h>
#include <Metal/Metal.h>
#include <MetalKit/MTKView.h>
#include <MetalKit/MetalKit.h>
using namespace std;
我错过了什么?
解决方案
默认情况下, Xcode 会将.cpp
文件编译为 C++ 文件,而#import
用于 Objective-C 的 s 将不起作用。您应该将文件重命名为或在右侧窗口中.mm
更改其类型。Inspector
由于您没有使用 Xcode,而是使用 vscode,因此重命名文件要容易得多,因为 clang 会自动将其编译为 Objective-C++
推荐阅读
- powerbi - 当前 YTD 与上个月 YTD Power BI 度量
- git - 使用 git 将通用项目添加到特定项目
- php - Woocommerce - 如果有子类别,则向类别添加额外的类
- pine-script - 如何将 Well Wilders MA 转换为 v4?
- python - 如何访问捕获的参数/python实例方法对象的闭包?
- python - 如何使用 for 循环访问 PyQt 中多个复选框的复选框文本?
- angular - Angular FormControl valueChanges 无法使用 mat-autocomplete
- unit-testing - 如何用 nix 测试共享库?
- python-3.x - 将 DataFrame 列转换为对列表
- python - 查找数据框中列的各种值之间的共同交集,其中值是数组/列表