相关疑难解决方法(0)

什么是内联命名空间?

C++ 11允许inline namespaces,其所有成员也自动在封闭中namespace.我想不出任何有用的应用 - 有人可以给出一个简短,简洁的例子,说明inline namespace需要哪种情况以及最常用的解决方案?

(另外,当发生了什么并不清楚,我namespace声明inline在一个但不是所有的声明,这可能住在不同的文件.这难道不是找麻烦?)

c++ namespaces c++11 inline-namespaces

320
推荐指数
6
解决办法
5万
查看次数

Apple Mach-O链接器和使用OpenCV的多个"未定义符号"错误

我目前是Objective C的真正初学者,我正在使用框架OpenCV开发一个应用程序.

我正在学习一个教程,但在构建项目时,我遇到了几个错误:

Undefined symbols for architecture i386:
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::flush()", referenced from:
      cv::gpu::error(char const*, char const*, int, char const*) in opencv2(gpumat.o)
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<< <std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*) in opencv2(gpumat.o)
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from:
      std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<< <std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*) in opencv2(gpumat.o)
  "std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(int)", referenced from:
      cv::gpu::error(char const*, char const*, int, char const*) in opencv2(gpumat.o)
  "std::__1::cerr", referenced from:
      cv::gpu::error(char const*, char const*, int, …
Run Code Online (Sandbox Code Playgroud)

xcode opencv objective-c

35
推荐指数
3
解决办法
2万
查看次数

libc ++ - 停止std重命名为std :: __ 1?

经过大量努力,让clang和libc ++编译,运行,与NetBeans集成,甚至交叉编译到32位机器,我想我已经弄明白了!所以我去使用libstdc ++没有的一些功能(将我的开发环境颠倒过来的全部原因),并发现......我实际上无法做到这一点.

安装了libc ++,它可以运行,编译后的程序(当它工作时)确实需要它.但是,编译器仍然试图通过搞乱命名空间来抓住每个机会使用libstdc ++版本.std::__1::map,std::__1::basic_string等等.现在,我从这个问题中知道为什么会发生这种情况,以及为什么libc ++会这样做.我只需要知道如何删除它,因为它完全不适用 - 我真的,确实想要使用libc ++版本,我的代码中没有任何内容需要两种类型共存.

我已经尝试从包含路径中取出libstdc ++文件夹,并且失败了,这使得它们完全无法访问.没运气.我没有使用任何附加库,只使用内置的Linux/POSIX头文件(errno,socket,syslog,fcntl).

编辑:错误消息:

CoreCache.cpp:61:12: error: no member named 'emplace' in 'std::__1::map<std::__1::basic_string<char>, CacheEntry, std::__1::less<std::__1::basic_string<char> >, std::__1::allocator<std::__1::pair<const std::__1::basic_string<char>, CacheEntry> > >'
Run Code Online (Sandbox Code Playgroud)

libstdc ++地图没有emplace().libc中++版本.

从命令行调用以下似乎有效:

clang++ -o stachecache -I /usr/local/lib/clang/3.1/include/ -I /usr/include/c++/v1/ -std=c++0x -stdlib=libc++ ./*.cpp
Run Code Online (Sandbox Code Playgroud)

NetBeans中的调用不会:

clang++ -stdlib=libc++ -O3   -c -O3 -Werror -MMD -MP -MF build/Release/clang-Linux-x86/CoreCache.o.d -o build/Release/clang-Linux-x86/CoreCache.o CoreCache.cpp
Run Code Online (Sandbox Code Playgroud)

c++ std clang libc++

10
推荐指数
1
解决办法
5499
查看次数

在libc ++中在内联命名空间中转发声明类的可移植方法是什么?

当我指定了下面的代码不会只编译-stdlib=libc++clang++:

namespace std {
  class mutex;
}

void f(std::mutex &x);

#include <mutex>

void f(std::mutex &x) { }
Run Code Online (Sandbox Code Playgroud)

注意:通过名称查找找到的候选人是'std :: __ 1 :: mutex'

我明白::__1那里有什么,

但在我看来,libc++打破了C++标准定义的API:

应该可以转发声明,std::mutex因为它应该直接驻留在std,不应该吗?

请注意,编译阶段而不是链接阶段失败.所以我认为我的问题的答案应该是"因为libc ++使用了与GNU libstdc ++不同的ABI ......"

c++ clang c++11 libc++

3
推荐指数
1
解决办法
511
查看次数

标签 统计

c++ ×3

c++11 ×2

clang ×2

libc++ ×2

inline-namespaces ×1

namespaces ×1

objective-c ×1

opencv ×1

std ×1

xcode ×1