Tag: 前向声明

未命名结构的前向声明

赏金问题:所以,这两个Foo不是一回事。 精细。 第二种forms是在图书馆给出的。 鉴于我无法改变它,我该如何向前申报呢? 我一直认为C和C ++允许重复声明,只要没有重复的定义。 然后,当我试图编写扩展C库的C ++代码时遇到了这个问题。 struct Foo; typedef struct {} Foo; 这给出了以下错误: '结构Foo'有一个前面的声明'结构Foo' 我想向前宣布,补充! 这里有什么问题?

为什么C ++的朋友类只需要在其他命名空间中进行前向声明?

假设我有一个F类,它应该是类G (在全局命名空间)和C (在命名空间A )中的朋友。 要成为A::C朋友, F必须被转发声明。 对G朋友,没有F前向声明是必要的。 同样,类A::BF可以成为A::C朋友,无需前向声明 下面的代码演示了这一点,并用GCC 4.5,VC ++ 10和至less另外一个编译器编译。 class G { friend class F; int g; }; // without this forward declaration, F can't be friend to A::C class F; namespace A { class C { friend class ::F; friend class BF; int c; }; class BF { public: BF() { […]

什么是<iosfwd>标题?

这个文件中提到的<iosfwd>头是什么? 为什么有必要? 任何例子?

如何转发声明一个C ++模板类?

给定一个如下所示的模板类: template<typename Type, typename IDType=typename Type::IDType> class Mappings { public: … Type valueFor(const IDType& id) { // return value } … }; 如何有人可以在头文件中声明这个类?

在C ++中,是否有可能将一个类声明为从另一个类inheritance的类?

我知道我可以这样做: class Foo; 但我可以转发声明一个类从另一个inheritance,如: class Bar {}; class Foo: public Bar; 一个示例用例将是co-variant引用返回types。 // somewhere.h class RA {} class RB : public RA {} …然后在另一个不包含some.h的头文件中 // other.h class RA; class A { public: virtual RA* Foo(); // this only needs the forward deceleration } class RB : public RA; // invalid but… class B { public: […]

是否有可能在Python中转发声明一个函数?

是否有可能在Python中转发声明一个函数? 我想在声明之前使用我自己的cmp函数对列表进行sorting。 print "\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]) 我已经组织了我的代码,在调用之后放置了cmp_configs方法的定义。 它失败,出现这个错误: NameError: name 'cmp_configs' is not defined 在使用cmp_configs方法之前,有没有办法“声明” cmp_configs方法? 这将使我的代码看起来更清洁? 我想有些人会试图告诉我,我应该重新组织我的代码,使我没有这个问题。 但是,有些情况下,这可能是不可避免的,例如在执行某种forms的recursion时。 如果你不喜欢这个例子,假设我有一个真正需要转发声明一个函数的情况。 考虑一下在Python中向前声明一个函数是必要的: def spam(): if end_condition(): return end_result() else: return eggs() def eggs(): if end_condition(): return end_result() else: return spam() 其中end_condition和end_result已经被定义。 是唯一的解决scheme来重新组织的代码,总是把调用之前的定义?

在C ++中提前声明typedef

为什么编译器不让我转发声明typedef? 假设这是不可能的,那么让我们的包含树保持小的最佳做法是什么?

Objective-C:前向类声明

我正在编写一个多视图的应用程序,利用一个名为RootViewController的类来切换视图。 在MyAppDelegate头文件中,我创build了一个名为rootViewController的RootViewController实例。 我已经看到了@class指令被用作“前向类声明”的例子,但是我不太清楚这意味着什么或者什么意思完成了。 #import <UIKit/UIKit.h> @class RootViewController; @interface MyAppDelegate . . .

是否应该使用前向声明而不是尽可能包含?

每当类声明只使用另一个类作为指针时,使用类前向声明​​而不是包含头文件是否有意义,以便先发制人地避免循环依赖问题? 所以,而不是有: //file Ch #include "Ah" #include "Bh" class C{ A* a; B b; … }; 做这个,而不是: //file Ch #include "Bh" class A; class C{ A* a; B b; … }; //file C.cpp #include "Ch" #include "Ah" … 有没有任何理由为什么不尽可能做到这一点?

我如何转发声明一个内部类?

可能重复: C ++中嵌套types/类的前向声明 我有一个这样的class级 class Container { public: class Iterator { … }; … }; 在其他地方,我想通过引用传递一个Container :: Iterator,但我不想包含头文件。 如果我尝试转发声明类,我得到编译错误。 class Container::Iterator; class Foo { void Read(Container::Iterator& it); }; 编译上面的代码给出了… test.h:3: error: 'Iterator' in class 'Container' does not name a type test.h:5: error: variable or field 'Foo' declared void test.h:5: error: incomplete type 'Container' used in […]