我有一个类型VertexContainer是typedef的实例化模板:
// in a header, included into cpp
class Vertex {/*...*/};
typedef DataVector<Vertex> VertexContainer;
class SomeOtherClass;
Run Code Online (Sandbox Code Playgroud)
我想VertexContainer在标题中使用,而不是拉入可能的定义.是否有可能为它创建一个"原型"(如类声明)?
// in header
class VertexContainer; // <-- this doesnt work
class SomeOtherClass;
SomeHandle<SomeOtherClass> handle1; // this works
SomeHandle<VertexContainer> handle2; // how to prototype VertexContainer?
Run Code Online (Sandbox Code Playgroud)
使用GCC我得到类似于的错误:
error: using typedef-name 'VertexContainer' after 'class'
class VertexContainer;
(...)
note: 'VertexContainer' has a previous declaration here
typedef DataVector< Vertex > VertexContainer;
^~~~~~~~~~~~~~~`
Run Code Online (Sandbox Code Playgroud)
对于权威性答案,您应该提供更多上下文,但一般情况下,如果将其自身放在标题中,则会编译以下内容:
template<typename T> class DataVector;
class Vertex;
typedef DataVector<Vertex> VertexContainer;
Run Code Online (Sandbox Code Playgroud)
您需要向前声明模板和类.但是,当你到达这里时:
SomeHandle<VertexContainer> handle2;
Run Code Online (Sandbox Code Playgroud)
模板和可能的类(取决于模板如何使用类)都需要完全定义.在您的问题中没有其他背景,无法确定.
但是,纯粹作为前向声明,前向声明模板和模板参数足以定义typedef.
此外:
class VertexContainer;
Run Code Online (Sandbox Code Playgroud)
您在该行上的错误原因略有不同.VertexContaner不是一个阶级.它是一个typedef别名.A typedef不会创建新类.它为现有类创建别名.
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |