【发布时间】:2011-02-04 23:09:14
【问题描述】:
我是 C++ 新手,请耐心等待。我有一个名为 A 的泛型类。A 有一个名为 B 的嵌套类。A 包含一个名为 getB() 的方法,它应该返回 B 的一个新实例。但是,我无法编译我的代码。这是它的样子:#include
啊.h
template <class E>
class A {
public:
class B {
public:
int data;
};
B * getB();
};
A.cpp
#include "A.h"
template <class E>
A<E>::B * A::getB() {
return new B();
}
当我尝试编译它时,我收到以下错误:
error: expected constructor, destructor, or type conversion before '*' token
有人知道我做错了什么吗?
谢谢,
螺旋形
更新:
感谢大家的快速回复。我仍然很难让这个工作。采纳这里列出的建议后,我有这样的事情:
啊.h
template <class E>
class A {
public:
class B {
public:
int data;
};
B * getB();
};
template <class E>
typename A<E>::B * A<E>::getB() {
return new B();
}
class C {
};
但是,当我尝试从 main 中使用它时,我得到了一个错误。这是我的主要方法:
main.cpp
#include "A.h"
int main(int argc, char *argv[])
{
A<C> *a = new A<C>();
A<C>::B *b = a.getB();
}
当我尝试编译它时,我收到以下错误:
error: request for member 'getB' in 'a', which is of non-class type 'A<C>*'
再次感谢您的快速回复。
螺旋形
【问题讨论】:
-
嗯,在 Comeau 工作。但即使这个编译,它会有帮助吗? getB 的定义仅在 A.cpp 中可用。由于它是一个模板,因此除非您的编译器支持“导出”,否则无法从任何其他翻译单元调用它。
-
响应编辑:使用
->通过指针访问成员。 -
哦,呃,我现在觉得自己很愚蠢。我在 Java 上花了太多时间。感谢史蒂夫的帮助。
-
不用担心。顺便说一句,对于类模板,我通常只在类定义中定义函数。除非您正在处理类之间的相互依赖关系(这意味着在类和函数之间需要有更多定义),否则使用您拥有的代码而不仅仅是
class A { ... B* getB() { return new B(); } ... };没有任何好处。 -
我写这个作为一个简单的例子来说明我遇到的问题。我真正的代码有点复杂,我试图避免大量的内联代码。
标签: c++ templates nested-class