如何用android ndk和eclipse编译c++11代码?
我正在使用Android NDK R8D和Eclipse Juno.我正在尝试编译使用C ++的C ++代码,例如mutex,lock_guard,shared_ptr等. 我得到的错误: "错误:'shared_ptr'不是'std'的成员 "致命错误:静音:没有这样的文件或目录" 我遇到了一个类似的问题在这里.它似乎对他们有用,但是那里的解释还不完整,所以我不能为我工作. 我将"NDK_TOOLCHAIN_VERSION=4.7"添加到Application.mk和"LOCAL_CFLAGS += -std=c++11" Android.mk文件中.不过,它没有编译. 在上面的链接中说: "请确保标准库包括路径(例如 /android-ndk-r8d/sources/cxx-stl/gnu-libstdc++/4.7/include)在 目标设置." 我如何插入它? 我还会在Eclipse IDE中出现错误(在汇编之前,在源上).我知
2 2024-02-17
编程技术问答社区
智能指针在安卓NDK r8中不起作用
我不知道如何在我的Android项目中使用共享指针.我正在使用Android NDK R8D上的Mac OS X上的最新Eclipse ADT. 这是我的Android.mk文件中的内容: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_CPPFLAGS := -std=c++11 LOCAL_MODULE := native LOCAL_SRC_FILES := native.cpp include $(BUILD_SHARED_LIBRARY) 这是我的Application.mk文件中的内容: NDK_TOOLCHAIN_VERSION=4.7 APP_STL := stlport_shared 我已经尝试了默认的GCC 4.6,实验4.7和Clang3.1工具链. 我尝试链接到stlport_shared和gnustl_shared C ++运行时库. 我已经尝试了FLAGS
0 2024-02-17
编程技术问答社区
.访问违规读取位置
我遇到了一个非常奇怪的问题. 代码如下: ::boost::shared_ptr pInfo=CQUserViewDataManager::GetInstance()->GetImageFileInfo(nIndex); Image* pImage=pInfo->m_pThumbnail; if(pImage==NULL) pImage=m_pStretchedDefaultThumbImage; else { // int sourceWidth = pInfo->GetWidth(); int sourceHeight = pInfo->GetHeight(); int destX = 0, destY = 0; float nPercent = 0; float nPercentW = ((float)GetThumbImageWidth()/(floa
2 2024-01-09
编程技术问答社区
当使用许多类型化的操作符重载时,不明确的重载
我想创建一个用于字符串的包装纸.我还希望该类能够返回包装纸的地址和存储(包装)字符串的地址: void FunctionString(string*); void FunctionWrappedString(wrappedString*); int main(){ wrappedString wrappedStringObject; FunctionString(&wrappedStringObject); FunctionWrappedString(&wrappedStringObject); wrappedString anotherWrappedStringObject; if(wrappedStringObject == anotherWrappedStringObject){ // code } } 这是课程的重要部分: class wrappedString{ typedef char* string;
6 2023-12-15
编程技术问答社区
C++11是否有像Boost'的scoped_array那样的动态分配数组的包装器?
我经常需要处理C ++中动态分配的数组,因此依靠scoped_array,shared_array等boost.在阅读 解决方案 有unique_ptr的专业化,例如unique_ptr. #include #include struct test { ~test() { std::cout array(new test[3]); } 运行它时,您将收到此消息. test::dtor test::dtor test::dtor 如果要使用shared_ptr,则应将std::default_delete用于deleter,因为它没有shared_ptr. std::shared_ptr array(new test[3], s
4 2023-12-15
编程技术问答社区
如何在一个项目中只包括BOOST智能指针代码?
在不将所有Boost库中添加到项目的情况下,包括Boost Smart Pointer Library的最佳实践 ? 我只想在项目中提高智能指针库,而我不想入住/提交 200 MB 源代码(BOOST 1.42.0)将其纳入我的项目存储库中.此外,我的Windows Mobile Project本身甚至没有达到该尺寸的10%! 解决方案 对于智能指针库,您有两个选项. 复制您在源文件中包含的标题(shared_ptr.hpp等).然后复制其他文件,直到项目构建(确保维护目录结构). 使用boost 前者将确保添加最少的文件数量.对于任何大量的提升子集,后者的速度要快得多,但是它可能包含许多您不需要的文件(您的程序不支持平台的兼容性标题). 其他解决方案 只需在包含所需代码的文件夹中检查一下吗?尝试删除/移动/重命名"其他所有",并查看智能指针库的外部依赖性,可能不多.我几乎很肯定,它不需要任何构建的代码(即库),因此只需检查所有被包含的标题似乎就是要走的路
4 2023-12-08
编程技术问答社区
unique_ptr,qvector.resize() 引发错误 2280 尝试引用一个已删除的函数
防止范围蠕变(在上一个Q )上述错误. 我的体素类定义: #ifndef VOXEL_H #define VOXEL_H #include #include #include include class Voxel : public QObject { Q_OBJECT public: Voxel(); ~Voxel(); }; #endif // VOXEL_H 触发错误的主文件: #include int main(int argc, char *argv[]) { QVector > > cVoxel; cVoxel.resize(0); int rows = 80, cols = 80; for (int i = 0; i
10 2023-12-07
编程技术问答社区
我必须对CComPtr对象调用Release()方法吗?
我正在与SAPI5 API合作,将文本处理到语音.如果我简化了我的代码看起来像这样(我删除了错误检查以尽可能简化它): int main() { CoInitialize(NULL); CComPtr spVoice; spVoice.CoCreateInstance(CLSID_SpVoice); ... CoUninitialize(); return 0; } 由于某些奇怪的原因,如果我不调用spvoice.release(),我的代码会崩溃.因此,上面的代码崩溃了,但是此代码效果很好: int main() { CoInitialize(NULL); CComPtr spVoice; spVoice.CoCreateInstance(CLSID_SpVoice); ... spVoice.Release(); CoUninitia
2 2023-12-06
编程技术问答社区
我如何用weak_ptr强制执行单一所有权? (或者,如何子类化shared_ptr并覆盖dtor)
所以,我已经完成了(少量)阅读,并且知道unique_ptr与原始指针是建模独特所有权时使用的模式. 但是,我真的很喜欢使用flee_ptr检查值是否有效的简单明了的概念,然后在使用它后丢弃共享_ptr,这使每个人都很高兴(以略有参考计数的性能成本). 我目前的特殊问题是创建一个表达和灵活的系统来跟踪多点触摸点,使用代表触摸的对象的破坏是触摸已经结束的信号似乎优雅的.如果我采用了原始指针路线,我需要定义一些语义,这些语义每个组件与该系统接口都需要符合,这有些丑陋,例如涉及第二个参数,以指示指示指示器是否有效. 原始指针路线的这个问题也许是一个稻草人问题,因为我不希望这会成为一个大型项目,但是在如何编写最佳现代C ++代码方面,问题主要是实际的兴趣. 伪代码: class InputConsumer { void handle(std::list>*); // consumer doesnt hold refer
10 2023-11-29
编程技术问答社区
如何在C++中维护指向父级的弱指针?
是否有一种标准方法可以在C ++中的子对象中维护父母(使用共享指针创建)的弱指针? 本质上,我需要在以下内容上实现一些内容: Class B; Class A { ... private: B m_b; }; Class B { .... public: void SetParentPtr(const boost::shared_ptr& a) { m_parentPtr = a; } private: boost::weak_ptr m_parentPtr; }; 在上面,B级的所有实例都需要将弱指针固定给其父母(即A类的对象). A类对象是使用共享_ptr实例化的.我可以想到一种使用无效ealter的解决方案.但这是这样做的标准方式吗? 解决方案 有隐式转换为feal_ptr,因此您可以使用 void SetParentPtr(boost::weak_ptr a) { } 直接. 还检查boost :: shared_f
2 2023-11-29
编程技术问答社区
unique_ptr operator=
std::unique_ptr ptr; ptr = new int[3]; // error error C2679: binary '=' : no operator found which takes a right-hand operand of type 'int *' (or there is no acceptable conversion) 为什么不汇编?如何将本机指针连接到现有的unique_ptr实例? 解决方案 首先,如果您需要一个唯一的数组,请将其制作 std::unique_ptr ptr; // ^^^^^ 这允许智能指针正确使用delete[]来处理指针,并定义operator[]以模仿普通数组. 然后,operator=仅针对独特指针而不是原始指针的rvalue引用定义,而原始指针不能隐式转换为智能指针,以避免意外的分配破坏独特性.因此,原始指针
8 2023-11-23
编程技术问答社区
std::shared_ptr是空的但不是空的
不拥有任何指针的共享_ptr称为空共享_ptr.指向无对象的共享_ptr称为null shared_ptr,不得被删除.请注意,虽然一个空共享_ptr不一定是null shared_ptr,而null shared_ptr不一定是一个空的共享_ptr. 我能够创建一个空的std :: shared_ptr,即一个没有任何东西而不是null的东西,即包含有效载荷? 用户酶是将"遗产"代码与现代指针结合:鉴于foo的呼叫语法不会更改, void foo(const MyClass* p) { if (p == nullptr) { auto defaultObject = std::make_shared("some", "parameters"); defaultObject->doSomething(); ... defaultObject->doSomethingElse();
20 2023-11-20
编程技术问答社区
共享的无效指针。为什么会有这样的效果?
要在我的应用程序中解决一个非常特殊的问题,我需要一个共享的分配数据,但是对于外界,基础数据类型应保持隐藏. 我可以通过制作我所有其他类都继承的某种根类来解决此问题,并在此根类上使用共享_ptr,例如: std::shared_ptr 但是: 我不希望我所有的班级从这个root类中继承,只是为了获得这个共享指针 有时我想将共享指针返回到std :: vector,std :: list :: set,...显然不会从我的根类中继承 很奇怪,似乎您可以在void上创建一个共享_ptr,这似乎可以正常工作,如本示例中所示: class X { public: X() {std::cout
8 2023-11-20
编程技术问答社区
协变虚函数和智能指针
在C ++中,一个子类可以在覆盖虚拟函数时指定不同的返回类型,只要返回类型是原始返回类型的子类(并且两者都是作为指针/引用返回). 是否也可以将此功能也扩展到智能指针? (假设智能指针是某些模板类) 说明: class retBase {...}; class retSub : public retBase {...}; class Base { virtual retBase *f(); }; class Sub : public Base { virtual retSub *f(); // This is ok. }; class smartBase { virtual smartPtr f(); }; class smartSub : public smartBase { virtual smartPtr f(); // Can this be somehow acheiv
12 2023-11-19
编程技术问答社区
C++中std::shared_ptr的克隆模式
为什么需要(为了使其进行编译)中间CloneImplementation和std::static_pointer_cast(请参见下面的 3 )才能使用std::shared_ptr的克隆模式,而不是更接近的东西(请参阅下面的 2 节)要使用原始指针(请参见下面的 1 节)?因为据我了解,std::shared_ptr有一个广义的复制构造函数和一个广义的作业操作员? 1.带有原始指针的克隆图案: #include struct Base { virtual Base *Clone() const { std::cout
6 2023-11-19
编程技术问答社区
使用智能指针的返回类型协和性
在C ++中,我们可以这样做: struct Base { virtual Base* Clone() const { ... } virtual ~Base(){} }; struct Derived : Base { virtual Derived* Clone() const {...} //overrides Base::Clone }; 但是,以下内容不会做同样的技巧: struct Base { virtual shared_ptr Clone() const { ... } virtual ~Base(){} }; struct Derived : Base { virtual shared_ptr Clone() const {...} //hides Base::Clone }; 在此示例中成员只能从参考(或指针)更改为基础转换为参考(或指针).有什么聪明的解决方法吗?当然,有人可
0 2023-11-19
编程技术问答社区
带有智能指针的虚拟构造函数习惯法
我有一个多态性类的层次结构,例如Shape抽象基类及其派生类,例如Rectangle,Circle等.之后 virtual构造函数成语,我想知道为什么我们需要使用智能指针时的派生类中虚拟构造函数的返回类型应与其父类中的相同类型? 例如,请参见下面的代码,其中clone()和create()成员函数需要返回smart_pointers smart_pointers Shape类.但是,使用simple pointers时,返回类型可以与派生类别之一相同. 有人可以解释为什么我们需要以引用的方式处理这些功能? class Shape; typedef std::unique_ptr shape_ptr; class Shape{ public: //typedef std::unique_ptr shape_ptr; Shape(){}; virtual ~Shape(){};
4 2023-11-19
编程技术问答社区
如何使用std::vector防止内存重新分配
我读了很多问题,但是没有人为我的具体情况回答我. 实际上我有 std::vector points; std::vector triangles; Point2Dd是2D点的类,指定其实现方式并不重要. 三角形的实现如下: class Triangle{ public: Triangle(); Triangle(Point2Dd* p1, Point2Dd* p2, Point2Dd* p3); // Getter & setter private: Point2Dd* vA = nullptr; Point2Dd* vB = nullptr; Point2Dd* vC = nullptr; } 也就是说,作为点的三分球. 实际上它可以很好地工作,但我认为:如果我在矢量中添加另一点并且我的向量更改所有内存地址?我所有的三角形将由无效的
8 2023-11-17
编程技术问答社区
如果元素ID与搜索参数匹配,如何从std::vector移除一个元素
,如果项目ID与参数匹配,我正在尝试编写将搜索的算法,并从项目向量中删除项目.请参阅下面的示例代码: struct item{ item(int newID){id = newID;} bool operator==(const item& other){return id = other.id;} int id }; std::vector> vec; vec.push_back(std::unique_ptr(new item(10)); vec.push_back(std::unique_ptr(new item(15)); vec.push_back(std::unique_ptr(new item(20)); 因此,使用上述代码,我希望能够搜索存储值15的项目,然后将其从向量中删除,删除它. 我该怎么做? 诚然,我可能也需要刷新独特的指针,因此,如果
2 2023-11-17
编程技术问答社区
是否应该一直使用boost::ptr_vector来代替std::vector?
只是我一直遇到的一个概念性问题.在我当前的项目中,感觉就像我过度使用Boost smart_ptr和ptr_container库.我正在创建boost::ptr_vectors 在许多不同的对象中,并调用Transver()方法将某些指针从一个boost::ptr_vector移至另一个指针. 我的理解是,清楚地显示堆分配的对象的所有权很重要. 我的问题是,是否希望使用这些boost库来创建属于对象的堆分配成员,然后在进行任何处理时通过get()向这些成员使用普通指针. 例如... 游戏可能有属于它的瓷砖的集合.在boost::ptr_vector中创建这些瓷砖可能是有意义的.当游戏结束时,这些瓷砖应自动释放. 但是,如果我想暂时将这些瓷砖放在袋子中,是否应该在袋子中创建另一个boost::ptr_vector,然后通过transfer()或 我应该创建一个std::vector,其中瓷砖*引用瓷砖 在游戏中并将其传递给袋子? 谢谢. *
0 2023-11-17
编程技术问答社区