草庐IT

unnamed-namespace

全部标签

c++ - namespace 的前向声明

namespaceCounterNameSpace{intupperbound;intlowerbound;usingnamespaceNS;//Error}namespaceNS{inti;}//...namespaceNS{intj;}在上面的例子中,它显示了一个错误。错误C2871:“NS”:具有此名称的命名空间不存在我知道如果我在反命名空间问题得到解决之前定义NS。但是只想知道c++中是否存在命名空间的前向声明之类的东西。这样就可以在不定义NS之前解决上述问题counternamespace。请帮忙。 最佳答案 没有人说命名

c++ - namespace 、类和自由函数——什么时候需要完全限定的名称

在我下面的示例中,为什么我必须完全限定cpp中的自由函数的名称以避免链接器错误,为什么它适用于没有的类函数?你能解释一下区别吗?ctest.h:namespaceTest{intFreeFunction();classCTest{public:CTest();~CTest();};}ctest.cpp:#include"ctest.h"usingnamespaceTest;//intFreeFunction()->undefinedreferenceerrorintTest::FreeFunction()->worksjustfine{return0;}CTest::CTest()->

c++ - 为什么我不能从不同 namespace 中的友元类更改类的私有(private)成员?

我发现从好友类访问类的私有(private)成员时遇到问题。持有我要更改的私有(private)成员的类和进行更改的类在不同的命名空间中。friend类是在保存数据的类之后定义的,所以我尝试在命名空间外转发声明friend类。g++说我不能修改成员,因为它是私有(private)的,visualstudio好像觉得没问题。我是不是在做一些奇怪的非标准事情?为什么我不能更改成员?这是一个代表我的问题的简化片段:structS;namespaceN{classA{intm;public:A():m(5){};friendstructS;};}usingnamespaceN;structS{

c++ - 如何修复错误 : unknown type name ‘namespace’

#ifndefUNO_ACTION_#defineUNO_ACTION_namespaceUno{namespaceGame{classGame;}}//namespacenamespaceUno{namespaceAction{using::Uno::Game::Game;classAction{public:virtualboolisDisposeable()=0;virtualvoidtakeAction(Game*game)=0;virtual~Action(){}};}}#endif我在ubuntu12.04上编译这些代码,它返回错误集:action.h:4:1:error:

c++ - 如何在 C 代码中模拟 C++ namespace 功能?

我正在开发一个C++软件,但它通过包含通信协议(protocol)的共享头文件与C应用程序通信。由于C比C++“更基础”,所以我总是需要用C代码编写头文件(所以C++也行);否则它不适用于第二个应用程序。问题是我需要使用一个作用域修饰符,例如C++namespace——它在C中不存在。在C中模拟namespace功能的所有选项是什么?到目前为止我看到的唯一可能性是thisSOquestion中显示的那种,但不幸的是答案不够明确,我当然想知道是否还有其他选择。我还尝试使用struct来完成这项工作,但没有成功(至少考虑使用enumerator的struct)。

c++ - 如何处理不断发展的 C++ std::namespace?例如:std::tr1::shared_ptr 对比 std::shared_ptr 对比 boost::shared_ptr 对比 boost::tr1::shared_ptr

对于我目前正在处理的代码,我们有时需要使用较旧的编译器在一些较旧的系统上进行编译(例如,我们在较旧的IBMBlueGene/L上运行sims,其支持契约(Contract)规定了一些非常旧的C++编译器)。代码本身使用了shared_ptr,最初是为使用std::tr1::shared_ptr而编写的。在旧的BlueGene机器上编译时,我很快意识到它没有tr1::实现,所以我切换到boost::shared_ptr。原来还有一个boost::tr1::shared_ptr。现在代码在我们的研究小组之外得到了更广泛的使用,可移植性变得更加重要。在大型代码库中处理这些不断演变的标准库问题

c++ - 跨文件共享静态变量 : namespace vs class

这里有很多关于静态与全局的问题,但我认为我的问题有点不同。我想知道是否有一种方法可以像类中的静态变量那样跨文件共享放置在命名空间中的变量。例如,我这样编码://Foo.hclassFoo{public:staticintcode;staticinttimes_two(intin_);};namespacebar{staticintkode;}-//Foo.cppintFoo::code=0;intFoo::times_two(intin_){bar::kode++;code++;return2*in_;}-//main.cppintmain(){cout代码和kode的所有结果:Foo

c++ - using namespace std 的排序;包括?

我最近在C++项目的源文件中看到这段代码:usingnamespacestd;#include忽略所有关于拥有usingnamespacestd是否是个好主意的问题上面的代码是否合法?这两行之前的文件中没有代码。我原以为这不会编译,因为namespacestd直到#include才在范围内声明指令将其包含到文件中,但是使用项目的构建系统编译就可以了。如果有人链接到规范的相关部分,将不胜感激。 最佳答案 一个可能很有趣的数据点。当我编译以下内容时:usingnamespacestd;usingnamespaceno_such_name

c++ - 使用不带前缀 "std"且不带 "using namespace std;"的 std::sort() 编译成功

由于sort()是在namespacestd中定义的,因此它必须始终用作std::sort。但以下代码编译正确即使没有std。#include#includeintmain(){std::vectornums={4,3,1,7,2,0};sort(nums.begin(),nums.end());}ideone.com但是这段代码没有。#include#includeintmain(){std::arraynums={4,1,8,9,6};sort(nums.begin(),nums.end());}使用启用了-std=c++11标志的gcc4.8.4。从这两个代码片段中可以清楚地看出

c++ - isnan 在 std::namespace 中吗?更一般地说,什么时候 std::是必要的、可选的或要避免的?

在Mingw4.7.2中,我有一个库因为调用了isnan而无法编译。.如果我使用std::isnan,编译器会说“一切都会好起来的”,实际上我设法编译了我的文件。但是如果我检查here(编辑:但也许我还应该检查here:-)),std::似乎没有必要。如果我添加它,文件是否可以移植?更一般地说,对于每种情况,在放置std::时都有一种通用的理解方式是必要的(为了便携性)、可选的还是要避免的?编辑确实,问题的根源之一是包含多个header,其中一些包含的header包括,而这个cpp文件试图包含(当已经包含在内时)。 最佳答案 这取决