gpt4 book ai didi

c++ - 前向声明中的 "using typedef-name ... as class"

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:42 24 4
gpt4 key购买 nike

我在这里做一些基于策略的设计,我需要 typedef 很多模板类型来缩短名称。
现在问题来了,当我需要使用指向其中一种类型的指针时,我尝试只是转发声明它,但编译器提示 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;

有什么提示吗?

最佳答案

没错。 typedef-name 不能用在这样的前向声明中(这在技术上称为详细类型说明符,如果这样的说明符解析为 typedef-name,则程序格式错误)。

我不明白为什么您一开始就需要前向声明。因为如果您已经有了 typedef,为什么不直接使用该 typedef?它也代表那个类(class)。

编辑:从您的评论来看,您似乎需要一个指定的前向声明 header ,这与 <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;

然后你可以只使用那个标题,而不是做 class Test1 ,编译器不知道它是什么(并且会认为它是一个新类,独立于任何模板和 typedef)。

关于c++ - 前向声明中的 "using typedef-name ... as class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2263154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com