【发布时间】:2014-05-21 14:20:31
【问题描述】:
我曾尝试在方法声明中使用构造函数作为默认值,如下所示:
A.hpp
#include "B.hpp"
class B;
Class A {
friend class B;
public:
A();
~A();
const A& operator = (const A& rhs) {
// assignment operations
return *this;
}
int do_something (B* pB);
};
B.hpp
#include "A.hpp"
class B {
public:
B(const A a = A());
~B();
};
我的 gcc 4.8 C++11 编译器对 B(const A a = A()); 这条线不满意:
错误:“A”没有命名类型错误:ISO C++ 禁止声明没有类型的“A”[-fpermissive]
我需要 a 的默认值,并且我不想使用 B(A *a = NULL, int z = 0); 中的指针。
我也尝试过声明一个静态元素并使用这个对象作为默认值:
A.hpp
#include "B.hpp"
class B;
class A {
// ...
};
B.hpp
#include "A.hpp"
A a0;
class B {
public:
B(const A a = a0);
~B();
};
我得到完全相同的错误。
请问我该如何实现?
编辑:使代码更接近真实代码。
【问题讨论】:
-
这是你的真实代码吗?类定义后没有分号。
-
对不起,我写例子的时候错过了。原代码是对的。所以,原来的问题还是一样的。
-
没有足够的信息。 SSCCE 在这里很有用。
-
您的
A构造函数是private。除此之外,您发布的代码没有错误。 ideone.com/c5esGG -
这在
A.cpp中不起作用,因为在处理B.hpp时,A尚未定义。A必须在您要编写B(A a = A())时完全定义。
标签: c++ function object constructor default-value