微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

语法错误:'constant' 和缺少类型说明符 - 假定为 int注意:C++ 不支持 default-int

如何解决语法错误:'constant' 和缺少类型说明符 - 假定为 int注意:C++ 不支持 default-int

我正在尝试创建简单的结构。

template <typename T>
struct Element
{
    T eValue;   // Element Value
    Element <T>* next_element;
};


template <typename T,int size>
struct dynamic_array
{
    Element <T> first_element;
    Element <T>* last_element = &first_element;

    add(2);

    void add(int count)
    {
        for (int i = 0; i < count; i++) {
            last_element -> next_element = new Element <T>;
            last_element = last_element -> next_element;
        }
    }
};

如您所见,我正在尝试在结构中使用 add() 函数,但出现以下错误

错误 C2059:语法错误:'常量'

消息:请参阅对正在编译的类模板实例化“dynamic_array”的引用

错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int

警告 C4183:“添加”:缺少返回类型;假定是一个返回 'int' 的成员函数

但是当我尝试从 main() 函数中使用这个函数时,代码编译成功

int main()
{
    dynamic_array <int,5> myArray;
    myArray.add(5);
}

我不知道为什么会出现这些错误。我可以猜测它是与模板有关的东西,因为我最近开始使用它们

解决方法

正如 interjay 所指出的,您需要在构造函数中添加代码,以便在创建对象时执行它。但是您应该了解模板与否的基本事实,您正在定义一个 struct ,编译器在使用时会将其转换为相应的结构(想想向量)。 现在当您创建模板 struct 的对象时,会分配内存对于对象,在此之前没有执行任何代码。因此,如果您希望在创建对象后立即执行任何代码,请将代码放入构造函数中,如果您希望代码在特定时间执行,例如此处的 add(int count),则将它们放入成员函数中,然后需要时给他们打电话。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。