Я застрял с шаблоном класса в C ++ - PullRequest
1 голос
/ 11 февраля 2012

, поэтому я попытался создать простой класс списка массивов и уже застрял в начале ...

мой заголовочный файл (я удалил мой .cpp файл и все еще получил то же сообщение)

#ifndef ARRAYLIST_H
#define ARRAYLIST_H

#include <iostream>
using namespace std;

template <typename T>

class ArrayList {
private:
    T *arr;
    int length;

public:
    ArrayList();

    void Insert(T item);

    void Print();

    //friend &ostream operator<< (ostream &out, ArrayList &al);
};

#endif

и моя ошибка

1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall ArrayList<int>::ArrayList<int>(void)" (??0?$ArrayList@H@@QAE@XZ) referenced in function _main
1>C:\Users\Gannash\Desktop\Programming\C++WS\XMLReader\Debug\XMLReader.exe : fatal error LNK1120: 1 unresolved externals

Ответы [ 4 ]

1 голос
/ 11 февраля 2012

Если вы определяете шаблонный класс, вы должны предоставить все функции-члены встроенными. Отсутствующий ctor определенно является проблемой, но другие проблемы появятся, когда вы на самом деле используете свой класс. Кроме того, есть стандартные контейнеры, которые обеспечивают то, чего вы, возможно, захотите достичь, особенно std :: vector.

Кроме того, использование пространства имен в заголовочном файле является верботеном (или, по крайней мере, сильно не рекомендуется). вместо этого вы должны использовать std :: qualification, особенно вам это нужно только один раз.

1 голос
/ 11 февраля 2012

Это как вы только объявили методы класса и не определили их

Поместить все определения в заголовок

0 голосов
/ 11 февраля 2012

Давайте рассмотрим сообщение об ошибке:

unresolved external symbol "public: __thiscall ArrayList<int>::ArrayList<int>(void)" (??0?$ArrayList@H@@QAE@XZ) referenced in function _main

unresolved external symbol => Существует некоторый символ (здесь функция), объявленный, но не определенный

ArrayList<int>::ArrayList<int>(void) => Шаблон класса конструктора или ArrayList, созданный с помощью T = int

referenced in function _main => Возможно, в main () есть код, подобный следующему:

  ArrayList<int> IntList;

Решение состоит в том, чтобы обеспечить реализацию конструктора, например:

ArrayList() : arr( 0 ), length( 0 ) {}

внутри тела класса.


Кстати, пожалуйста, не стесняйтесь видеть следующее для вашей справки:

  std::array

  std::vector
0 голосов
/ 11 февраля 2012

Вы не определили ArrayList (), Insert () и Print () в файле .cpp.Вам нужно либо написать код для этих функций, либо превратить их в чисто виртуальные функции, или virtual Print()=0;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...