C++ 语法错误:';常数';和缺少类型说明符-假定为int。注:C++;不支持默认的int

C++ 语法错误:';常数';和缺少类型说明符-假定为int。注:C++;不支持默认的int,c++,visual-c++,C++,Visual C++,我试图创建简单的结构 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>

我试图创建简单的结构

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;
        }
    }
};
模板
结构元素
{
T eValue;//元素值
元素*下一个元素;
};
模板
结构动态数组
{
元素第一个元素;
元素*最后一个元素=&第一个元素;
增加(2);
无效添加(整数计数)
{
for(int i=0;i下一个元素=新元素;
最后一个元素=最后一个元素->下一个元素;
}
}
};
正如您所看到的,我试图在结构内部使用add()函数,但我得到以下错误:

错误C2059:语法错误:“常量”

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

错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认INT/P> 警告C4183:“添加”:缺少返回类型;假定为返回“int”的成员函数

但当我试图从main()函数使用此函数时,代码被成功编译

int main()
{
    dynamic_array <int, 5> myArray;
    myArray.add(5);
}
intmain()
{
动态数组;
添加(5);
}

我不知道为什么会出现这些错误。我可以猜测这是与模板相关的东西,因为我最近开始使用它们,正如interjay所指出的,您需要在构造函数中添加代码,以便在创建对象时执行它。但您应该了解一个基本事实,即无论是否使用模板,在定义结构时,编译器将在使用它时将其转换为各自的结构(考虑向量)。现在,当您创建模板结构的对象时,内存将分配给该对象,在此之前不会执行任何代码。因此,如果您希望在对象创建后立即执行任何代码,请将代码放入constuctor中,如果您希望代码在特定时间执行,如此处的add(int count),请将它们放入成员函数中,并在需要时调用它们。

类似于
add(2)的代码必须位于函数内部。也许你想把它放在构造器里?是的,你是对的。现在它起作用了。谢谢您您可以通过对非模板类进行相同的尝试,轻松检查您的猜测是否连接到模板,然后您就会知道您的猜测是错误的。尝试理解错误消息。。。C4430/C4183:在类定义中,任何形式为
name1 name2(something)
的都是成员函数声明。如果没有“name1”,则它是缺少返回类型的成员函数声明,而不是函数调用。C2059:
2
不是函数声明中的有效参数。(不幸的是,这个错误显然是首先显示的,因为它是另一个错误的结果)。