c++ - 错误 C2143 : syntax error : missing ';' before 'template'

标签 c++ arrays templates dynamic

我在 DynamicArray.cpp 类中收到此错误:“错误 C2143:语法错误:缺少 ';'在"template"之前”DynamicArray.cpp 的第三行。 它仍在进行中,但我也非常感谢对设计的批评。谢谢 动态数组.h

    #ifndef DYNAMICARRAY_H
    #define DYNAMICARRAY_H
    using namespace std;

    template <class T>
    class DynamicArray
    {
     private:
       T *origin;
       T *allocator;
       int size;
       int current;


     public:
        DynamicArray();
        DynamicArray(int);
        DynamicArray(const DynamicArray&);
        ~DynamicArray();
        void add(int);
        void erase(int);
        void empty();
        T at(int);
        void put(T);
        void remove();
        DynamicArray operator=(const DynamicArray&);
        int getSize();
        void operator[](int);
        T operator=(const T&);
        void insert(T&);
    }


    #endif // !DYNAMICARRAY_H

动态数组.cpp

    #include "DynamicArray.h"

    template <class T>
    DynamicArray<T>::DynamicArray()
    {
       origin = new T[5];
       allocator = NULL;
       size = 5;
       current = 0;
       for(int counter = 0; counter <= size - 1; counter++)
       {
         *origin[counter] = NULL;
       }
    }

     template <class T>
     DynamicArray<T>::DynamicArray(int size)
     {
     this->size = size;
     origin = new T[size];

     for(int counter = 0; counter <= size - 1; counter++)
     {
      *origin[counter] = NULL;
     }
     }

     template <class T>
     DynamicArray<T>::DynamicArray(const DynamicArray& obj)
     {
       empty();
       for(int counter = 0; counter < obj.size - 1; counter++)
       {
      origin[counter] = obj.origin[counter];
       }
     }

     template <class T>
     DynamicArray<T>::~DynamicArray()
     {
      delete [] origin;
      delete [] allocator;
      size = NULL;
     }

     template <class T>
     void DynamicArray<T>::add(int size)
     {
      allocator = new T[size]
      for(int counter = 0; counter < this-> size - 1; counter++)
      {
      allocator[counter] = *origin[counter];
      }
      origin = NULL;
      origin = new T[size];
      this->size = size;

      for(int counter = 0; counter < size - 1; counter++)
      {
      *origin[counter] = allocator[counter];
      }
      allocator = NULL;
    }

      template <class T>
      void DynamicArray<T>::erase(int ammount)
      {
      if(ammount - size > size)
      throw "\nnegetive memory location error\n";

      allocator = new T[size - ammount];

      for(int counter = 0; counter < this-> size - ammount - 1; counter++)
      {
      *allocator[counter] = origin[counter];
      }

      origin = NULL;
      size = size - ammount;
      origin = new T[size];

      for(int counter = 0; counter < size - 1; counter++)
      {
      origin[counter] = allocator[counter];
      }
      allocator = NULL;
    }

    template <class T>
    void DynamicArray<T>::empty()
    {
      origin = NULL;
      allocator = NULL;
    }

    template <class T>
    T DynamicArray<T>::at(int location)
    {
      if(location > size || location < 0)
      {
      throw "\nMemory Location does not exist\n";
      }
      else
      {
      current = location;
      return *origin[location];
      }
      }

    /*template <class T>
    void DynamicArray::put(T item)
    {
      add(1);
      origin[size - 1] = item;
    }*/

    template <class T>
    void DynamicArray<T>::remove()
    {
      erase(1);
    }

    template <class T>
    DynamicArray<T> DynamicArray<T>::operator=(const DynamicArray& obj)
    {
      empty();
      for(int counter = 0; counter < obj.size - 1; counter++)
      {
      origin[counter] = obj.origin[counter];
      }

      return *this;
    }

    template <class T>
    int DynamicArray<T>::getSize()
    {
      return size;
    }

    template <class T>
    void DynamicArray<T>::operator[](int index)
    {
      at(index);
    }

    template <class T>
    T DynamicArray<T>::operator=(const T &value)
    {
      put(value);
      return *this;
    }

    template <class T>
    void DynamicArray<T>::insert(T &value)
    {
      int counter = 0;
      do
      {
      if(*origin[counter] == NULL)
      {
          origin[counter] = value;
      }
      counter++
      }
      while(*origin[counter] != NULL)
    }        

最佳答案

您需要在类(class)末尾添加一个 ;:

    T operator=(const T&);
    void insert(T&);
};


#endif // !DYNAMICARRAY_H

此外,您需要在头文件中定义模板化函数。模板定义的工作方式需要可供任何调用函数或访问所涉及数据的代码使用。编译器为使用的每种类型的模板创建一个新的函数实例。此实例化是在使用模板化数据/函数的代码中完成的。

关于c++ - 错误 C2143 : syntax error : missing ';' before 'template' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12740334/

相关文章:

c++ - 如何引用作为模板参数传递的派生类中定义的类型?

c++ - 如何将 unsigned int 转换为 unsigned char

c++ - 如何在处理过程中更新 OpenGL 中的显示?

javascript - 将 SQL 查询结果从 PHP 传递到 Javascript 数组

c++ - 使用模板时如何初始化数组

C++ 将类型参数包转换为索引参数包

c++ - 使用指针访问 cpp 中的私有(private)值

c++ - clang++ 是否忽略了一些弃用警告的 extern "C"?

php正则表达式读取带有选择字段的选择表单

function - 在 Node.js 中使用 HTML Helpers?