具有pass-by-reference对象的类会产生编译错误

时间:2010-02-24 12:36:12

标签: c++ oop class object pass-by-reference

我在单独的头文件中定义了一个A类。我希望B类能够引用存储为变量的A类对象。

像这样:

档案:A.h

class A {
    //Header for class A...
};

档案:B.h

#include "A.h"
class B {
    private:
(24)        A &variableName;
    public:
(36)        B(A &varName);
};

当我尝试用g ++编译它时,我收到以下错误:

B.h:24: error: ‘A’ does not name a type
B.h:36: error: expected `)' before ‘&’ token

有关我做错的任何建议吗?如果重要,A类就是抽象类。

编辑:代码中的一些拼写错误

5 个答案:

答案 0 :(得分:3)

通过我编译好(如预期的那样)。我猜测A.h未正确包含在内。是否存在另一个包含相同名称的文件?也许存在#ifdef或某些阻止编译器看到A的定义的问题。为了检查这一点,我会在A.h中加入一些语法错误,看看编译器是否捕获了它。

答案 1 :(得分:1)

A.h是否包括B.h(直接或间接)?如果是这样,那么由于递归包含,你将无法在B之前定义A.如果需要在A中定义B,请使用forward declaration

答案 2 :(得分:0)

您似乎尝试在完全不相关的B类中声明A类的构造函数,这是编译器所抱怨的。

如果您希望从编译器的角度使用默认/隐式方式将B转换为A,则需要类似

的内容
operator A(B const &var);

而不是构造函数声明。

答案 3 :(得分:0)

我可以看到,这段代码是正确的。请检查以下内容:

  • 在某个命名空间中是A?
  • 是一个嵌套类吗?
  • 是您代码中某个宏的名称?
  • 是A真的名为A,或者您的真实代码中是否有拼写错误?

如果这些都不起作用,那么除非你发布错误发生的实际代码,否则我无法帮助你。

答案 4 :(得分:-2)

请注意,将引用作为成员变量很少是一个好主意。 B这个名字的真正含义是什么?