我在单独的头文件中定义了一个A类。我希望B类能够引用存储为变量的A类对象。
像这样:
class A {
//Header for class A...
};
#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类就是抽象类。
编辑:代码中的一些拼写错误
答案 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)
我可以看到,这段代码是正确的。请检查以下内容:
如果这些都不起作用,那么除非你发布错误发生的实际代码,否则我无法帮助你。
答案 4 :(得分:-2)
请注意,将引用作为成员变量很少是一个好主意。 B这个名字的真正含义是什么?