Yog*_*gur 6 c++ compiler-construction typedef forward-declaration
我在这里做一些基于策略的设计,我需要输入大量的模板类型来缩短名称.
现在的问题是,当我需要使用指向其中一种类型的指针时,我尝试只是向前声明它,但编译器抱怨test.cpp:8: error: using typedef-name ‘Test1’ after ‘class’
它与尺寸无关,因为我根本不需要obj,它只是一个".h"文件中的指针,我不想把整个模板带进去.
这是g ++:
//Works
class Test{};
class Test;
//Doesn't work
class Test{};
typedef Test Test1;
class Test1;
Run Code Online (Sandbox Code Playgroud)
任何提示?
Joh*_*itb 16
那是对的.typedef-name不能用在这样的前向声明中(这在技术上称为详细类型说明符,如果这样的说明符解析为typedef-name,则程序格式错误).
我不明白你为什么首先需要前方声明.因为如果你已经有了typedef,为什么不使用那个typedef呢?它只是表示该课程.
编辑:从你的评论中,你似乎需要一个指定的前向声明标题,同样徒劳无功<iosfwd>.因此,如果调用模板Test_Template_Name_Long,则此标头可能看起来像
TestFwd.h
template<typename A, typename B>
class Test_Template_Name_Long;
typedef Test_Template_Name_Long<int, bool> Test1;
Run Code Online (Sandbox Code Playgroud)
然后你可以使用那个头而不是做class Test1,编译器不知道它是什么(并且会认为它是一个新类,独立于任何模板和typedef).