标签: namespaces

建议解决枚举歧义名称冲突?

我在代码库中有一个类似于以下内容的库:

namespace rat {

   ...

   enum myEnum {
      BLUE,
      RED
   }

   ...
} //namespace rat
Run Code Online (Sandbox Code Playgroud)

之后我尝试使用该库在代码库中编译一个应用程序,当我使用命名空间rat(代码库主命名空间)说BLUE可能是rat::myEnum rat::BLUE或者rat::enums::Freq rat::enums::BLUE来自我不熟悉的其他文件时,它警告我有歧义(并且不是我的)有一个枚举Freq,在名称空间鼠标中的名称空间枚举中有一个名为BLUE的人...

用户代码中有没有办法说出我现在想要哪一个?或者我必须在名称空间mylib中嵌套mylibs枚举,然后说rat :: enums :: BLUE或rat :: mylib :: BLUE?

c++ enums namespaces

0
推荐指数
1
解决办法
3891
查看次数

在C++命名空间中使用内置类型(double,int等)?

我可以让内置的类型,如intdouble在C++命名空间中可用?

#include <complex>

typedef int my_int;

namespace my_namespace {
  namespace std = ::std;  // Works
  using ::my_int;         // Works

  using ::int;            // Fails: "expected unqualified-id before 'int'"
  typedef ::int int;      // Fails: "expected unqualified-id before 'int'"
}

typedef int out::int;     // Fails: "expected unqualified-id before 'int'"

my_namespace::my_int x;            // Works
my_namespace::std::complex<int> c; // Works

// I would like to use this:
my_namespace::int x2;    // Fails: "expected unqualified-id before 'int'" 
Run Code Online (Sandbox Code Playgroud)

我怀疑这是由于语言限制,禁止在其中使用带有关键字的限定标识符(int在本例中),但我希望有一些方法可以揭示这些.

用例

我正在尝试使用命名空间来组织类型,以便外部工具(SWIG)可以适当地用另一种语言包装函数.例如: …

c++ swig typedef namespaces built-in

0
推荐指数
1
解决办法
232
查看次数

命名空间中的函数?

可能重复:
为什么C#不允许像C++这样的非成员函数

而不是写StaticClass.Function()我想简单写Function().将有许多功能,所有功能都应该可以从不同的(和不相关的)类和文件访问.如何将这些函数放在特定的命名空间中?简单地声明它会给我一个编译错误

error CS1518: Expected class, delegate, enum, interface, or struct
Run Code Online (Sandbox Code Playgroud)

我知道其他.NET语言可以做到这一点.我可以使用编译选项吗?也许甚至没有证件?

c# namespaces function

0
推荐指数
1
解决办法
3458
查看次数

C2653:'GUI':不是类或命名空间

认真地让我紧张.这段代码工作得很好,我重新启动了IDE(Visual Studio 2010),现在突然代码变得疯狂了.错误日志是巨大的,我不知道是什么导致它,因为代码似乎非常正确.

1>ClCompile:
1>  uicont.cpp
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C2653: 'GUI' : is not a class or namespace name
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C2143: syntax error : missing ';' before '*'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Run Code Online (Sandbox Code Playgroud)

还有更多,但我认为这是造成错误的原因.以下是问题最多的文件的源代码.

法/ GUI/UIContext.h

#include <OGRE/OgreString.h>
#include <OGRE/OgreOverlay.h>
#include <OGRE/OgreOverlayManager.h>

#include <vector>

#include <Mage/GUI/Frame.h>

#ifndef …
Run Code Online (Sandbox Code Playgroud)

c++ namespaces class visual-studio-2010

0
推荐指数
1
解决办法
1386
查看次数

超级方法调用中的C++名称冲突

假设我有以下代码:

namespace x{
    class X{
        virtual void x(){}
    }
}

namespace y{
    class Y : public x::X{
         void x(){}
    }
}

int main(){
    x::X* a = new y::Y();
    a->x::X::x(); //Tries to access x::X::x non-virtually. 
                  //Fails, since it treats the first x as the 
                  //function name instead of the namespace
}
Run Code Online (Sandbox Code Playgroud)

如您所见,main方法的最后一行尝试静态调用类x :: X的x方法(即非虚拟).但是,这会失败,因为命名空间与方法具有相同的名称(两者都命名为x).因此,编译器将第一个x视为方法名称,然后抱怨x :: X没有任何意义.

这个问题在初看起来似乎是假设的,但它确实出现在我们的代码中:命名空间不能轻易地重命名,因为它是一个大项目的命名空间.方法名称无法更改,因为它必须遵守我们的范围之外的其他超类(库类).

那么,有没有机会以某种方式消除这种语法的歧义,以便我仍然可以非虚拟地调用方法x :: X :: x?

现在,我看到的唯一解决方案是x = X,然后使用typedef.有没有typedef的解决方案吗?

c++ methods namespaces

0
推荐指数
1
解决办法
102
查看次数

#include <fstream> visual c ++ 2010无法正常工作

我知道标题有点模糊,但我现在想不出更好的标题.我的代码中的摘录如下所示:

#include<iostream>
#include<fstream>
int main(){
ifstream f("cuvinte.txt");
f.getline(cuvant);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我想阅读"cuvinte.txt"中的下一个单词时,我写了f.getline(cuvant); 但我得到以下错误

error C2661: 'std::basic_istream<_Elem,_Traits>::getline' : no overloaded function takes 1 arguments
Run Code Online (Sandbox Code Playgroud)

我不知道问题是什么,我不久前偶然发现了这个问题,仍然无法超越它.

c++ namespaces using std visual-c++

0
推荐指数
1
解决办法
2188
查看次数

为什么不推荐`with`?是否有更好或其他方式"下降"到对象的命名空间?

来自MDN:

使用with不推荐,并在ECMAScript中5严格模式是被禁止的.建议的替代方法是将要访问其属性的对象分配给临时变量.

这似乎是一个伟大/有用/方便的功能.为什么不赞成?还有哪些方法可以达到这种效果?我不想去:

veryLongNS.y = veryLongNS.myFunc(veryLongNS.x);
veryLongNS.z = 6;
veryLongNS.otherFunc();
veryLongNS.a = {
    a:1,
    b:2,
    c:veryLongNS.processThree(3)
};
Run Code Online (Sandbox Code Playgroud)

javascript scope namespaces object

0
推荐指数
1
解决办法
59
查看次数

保护jar中的内部类变量

我们在一个类中有一个getter方法.在同一个JAR中,我们希望可以使用无标识符访问级别从相同的包和子包访问该变量.

访问级别下面是:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

我们的问题是,我们如何阻止某人采用已编译的.JAR,创建具有相同包命名空间定义的类,并能够通过getter访问我们的变量?

我们考虑去除特定变量的所有getter,并将变量值赋给其他具有setter和构造函数的类,当它们传递对自己的引用时.显然,他们将是最后的课程.这样,需要变量值的所有对象都有自己的私有副本.

我想知道是否有更好的方法?

java namespaces jar

0
推荐指数
1
解决办法
300
查看次数

每个实体类型一个memcache命名空间

"每个实体类型一个memcache命名空间"是个好主意?与单个命名空间相比时的任何其他影响?

 MemcacheServiceFactory.getMemcacheService("K1");
 MemcacheServiceFactory.getMemcacheService("K2");
 MemcacheServiceFactory.getMemcacheService("K3");
Run Code Online (Sandbox Code Playgroud)

google-app-engine memcached namespaces

0
推荐指数
1
解决办法
224
查看次数

C中的名称空间

我有以下代码:

typedef struct Y {int X;} X;
enum E {X};
Run Code Online (Sandbox Code Playgroud)

这会产生错误:

错误:'X'重新声明为不同类型的符号

据我所知,C隐式定义了结构,联合和枚举标记以及它们的成员的名称空间.所以,我不确定为什么会E::X碰到typedef结构标签X

C中的名称空间究竟是什么?

c namespaces c99

0
推荐指数
1
解决办法
137
查看次数