我在Xcode中使用3*.m文件(main.m,AppDelegate.m和projectnameTests.m)创建了一个新的cocoa应用程序.为了使用object-cpp,我将3*.m文件重命名为*.mm文件.
然后我从Xcode得到以下错误:
"架构x86_64的未定义符号:"_ NSApplicationMain",引用自:main.o中的_main ld:未找到架构x86_64 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)
我从来没有处理.o文件,所以我不确定是什么问题.请帮忙.
PS:我使用最新的Xcode版本(6.1.1).
我正在学习C ++ 11中的新多线程技术。我在网络上阅读的几乎所有教程都在教如何启动执行一个函数的新线程(一个或多个线程),如何稍后加入(或分离)一个或多个线程以及如何使用mutex
等避免竞争状况。
但是我没有看到它们显示如何使线程在程序的不同部分执行多个功能。问题是,使用C ++ 11线程是否可以实现以下目标?如果是这样,怎么办?(举个例子会很棒)。
void func1(std::vector<int> & data1){ ... }
void func2(std::vector<int> & data2){ ... }
// main function version I
int main(){
std::vector<int> data1;
// prepare data1 for func1;
std::thread t1(func1, std::ref(data1));
std::vector<int> data2;
// prepare data2 for func2;
if (func1 in t1 is done){
t1(func2, std::ref(data2));
}
t1.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此外,如果我想将上述main
函数体放入循环中,如下所示。可能吗?如果是这样,怎么办?
//main function version II
int main(){
std::vector<int> bigdata1;
std::vector<int> bigdata2;
std::thread t1; // Can I do this without telling t1 …
Run Code Online (Sandbox Code Playgroud) 我正在阅读头文件winapifamily.h的定义并注意以下定义WINAPI_FAMILY_PARTITION
:
#define WINAPI_FAMILY_PARTITION(Partitions) (Partitions)
Run Code Online (Sandbox Code Playgroud)
宏的一般用法(例如)如下:
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
Run Code Online (Sandbox Code Playgroud)
现在好迷茫,好像就相当于
#if WINAPI_PARTITION_APP
Run Code Online (Sandbox Code Playgroud)
拥有它有什么意义#if WINAPI_FAMILY_PARTITION(...)
?
这是winapifamily.h头文件的相关部分:
Run Code Online (Sandbox Code Playgroud)/* * Header files use the WINAPI_FAMILY_PARTITION macro to assign one or * more declarations to some group of partitions. The macro chooses * whether the preprocessor will emit or omit a sequence of declarations * bracketed by an #if/#endif pair. All header file references to the * WINAPI_PARTITION_* values should be in the form of occurrences of * …
我在 Visual Studio 2010 中添加了这些预构建事件和后构建事件。
现在,如果我构建项目,我将能够看到以下内容:
1>------ Build started: Project: HelloWorld, Configuration: Debug Win32 ------
1>Build started 2015-08-18 5:50:09 PM.
1>InitializeBuildStatus:
1> Creating "Debug\HelloWorld.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>PreBuildEvent:
1> Hello
1>ClCompile:
1> HelloWorld.cpp
1> HelloWorld.vcxproj -> C:\Users\yuchen\Desktop\HelloWorld\Debug\HelloWorld.exe
1>PostBuildEvent:
1> Byebye
1>FinalizeBuildStatus:
1>
1>Build succeeded.
Run Code Online (Sandbox Code Playgroud)
我对 Visual Studio 2013 重复相同的过程,无论出于何种原因,我不确定预构建事件和后构建事件是否实际运行。
输出是否移动到不同的窗口?是否有其他设置可以使预构建和构建后事件正常工作?
1>------ Rebuild All started: Project: HelloWorld2, Configuration: Debug Win32 ------
1> stdafx.cpp
1> HelloWorld2.cpp
1> HelloWorld2.vcxproj -> C:\Users\yuchen\Desktop\Win32Project1\Debug\HelloWorld2.exe
Run Code Online (Sandbox Code Playgroud) 这是关于C++
(不同平台的共享代码)与C#
(Windows Universal App)之间的通信.我们知道,下面是我们如何从一个函数调用C++
来C#
.
C#
class FooCS
{
FooCS()
{
FooC c = new ref FooC();
c.m_GetSomeValueEvent = GetSomeValueEvent;
// Some other stuff ...
}
string GetSomeValueEvent()
{
// Some other stuff ...
return "Hello World";
}
}
Run Code Online (Sandbox Code Playgroud)
C++
public delegate Platform::String GetSomeValueEventHandler();
class FooC
{
public:
event GetSomeValueEventHandler^ m_GetSomeValueEvent;
void someFunction(){
Platform::String^ str = m_GetSomeValueEvent();
// Some other stuff ...
}
}
Run Code Online (Sandbox Code Playgroud)
以上是非常直截了当的.但问题是这个字符串GetSomeValueEvent()
在C#
做一些繁重的任务,比如从数据库中读取数据,我必须做到async
.
async Task<string> GetSomeValueEvent() …
Run Code Online (Sandbox Code Playgroud) 我正在阅读 zlib 的文档,它相当详细。但我读到这一行:
输出数据将采用zlib格式,不同于 gzip 或zip格式
http://www.zlib.net/zlib_how.html
似乎 zlib 创建的zlib格式与本 SO 中讨论的zip格式不同:
zlib、gzip 和 zip 有什么关系?它们有什么共同点,又有什么不同?
任何人都知道是否可以使用 zlib 创建 zip 格式?如何?
我正在遵循android-studio-jni 指南并尝试使用 gradle 编译 C++ 本机代码。一切正常:我可以加载 JNI 函数、编写 C++ 类、编译、运行和调试。而且我不需要编写和维护Application.mk和Android.mk生成文件;它们似乎都由 gradle 隐式处理。只有一件事我不明白:如何从标准库中包含 C++ 头文件?
我想我一定在 gradle 脚本中遗漏了一些东西,但我找不到关于在这里添加什么的很好的参考。这是脚本:
android.ndk {
moduleName = "hello-android-jni"
// I tried adding the following, but nothing happens
stl = "stlport_static"
}
Run Code Online (Sandbox Code Playgroud)
屏幕截图显示所有标准标题都不可见。
我们正试图从获得的时区std::tm
同strftime
:
char timezone[50];
strftime(timezone, sizeof(timezone), "%Z", &timeCreated);
Run Code Online (Sandbox Code Playgroud)
在iOS上,我们得到的是“ EST”。但是在Windows上,我们会收到“东部夏令时”。有人知道如何以缩写形式一致地获取C ++中的当前时区吗?
我考虑通过简单地选择每个单词中的第一个字符来在时区的全名中进行缩写。但是我检查了缩写词的列表,并注意到我们可以使用像“ Chuuk Time”这样的时区并将其缩写为“ CHUT”。这使得无法进行手动调整。
与问题:Windows时区及其缩写不同?我不需要所有时区和缩写的完整列表。但是,例如,我需要一种系统的方法来使用当前时区strftime
。我希望他们使用系统的当前时区和当前本地时间。
是否可以使用 RxSwift 映射错误类型?
例如,我有一个像这样的辅助函数:
enum InternalError: Error {
case fooError
case barError
}
private func helper() -> Observable<MyData> {
// ...
}
enum ServiceError: Error {
case fatalError(message: String)
case warning(message: String)
}
Run Code Online (Sandbox Code Playgroud)
我希望我们可以这样做,请注意以下内容mapError
不存在:
func getData() -> Observable<MyData> {
helper().mapError({ error: InternalError -> ServiceError
switch error {
case .fooError:
return ServiceError.fatalError(message: "This is bad.")
case .barError:
return ServiceError.warning(message: "Be careful.")
}
})
}
Run Code Online (Sandbox Code Playgroud)
是否可以?或者总体来说这是一个坏主意?
在办公室文档页面https://docs.fastlane.tools/actions/gym/中没有太多关于此的文档。
唯一提到编译标志的是:
xcargs:
在构建阶段将附加参数传递给 xcodebuild。请务必引用设置名称和值,例如 OTHER_LDFLAGS="-ObjC -lstdc++"
这是我们目前所拥有的:
gym(options.merge(:export_xcargs => "-allowProvisioningUpdates",
:export_method => "development"))
Run Code Online (Sandbox Code Playgroud)
我们现在想将此标志添加到我们的构建中:
-Xfrontend -warn-long-expression-type-checking=100
Run Code Online (Sandbox Code Playgroud)
我们不想像这样将它添加到 Xcode 项目文件中https://github.com/fastred/Optimizing-Swift-Build-Times因为我们只希望在使用 fastlane 的构建机器上进行此检查。
所以这就是我们尝试的:
gym(options.merge(:export_xcargs => "-allowProvisioningUpdates",
:export_method => "development",
:xcargs => "-Xfrontend -warn-long-expression-type-checking=100"))
Run Code Online (Sandbox Code Playgroud)
但它一直抱怨这个错误:
xcodebuild: error: invalid option '-Xfrontend'
Run Code Online (Sandbox Code Playgroud)
我们如何正确添加这个标志?