Note that there are some explanatory texts on larger screens.

plurals
  1. POc++ templated class does not link
    primarykey
    data
    text
    <pre><code>template&lt;typename AT&gt; class growVector { int size; AT **arr; AT* defaultVal; public: growVector(int size , AT* defaultVal); //Expects number of elements (5) and default value (NULL) AT*&amp; operator[](unsigned pos); int length(); void reset(int pos); //Resets an element to default value void reset(); //Resets all elements to default value ~growVector(); }; </code></pre> <p>and .cpp is</p> <pre><code>template&lt;typename AT&gt; growVector&lt;AT&gt;::growVector(int size, AT* defaultVal) { arr = new AT*[size]; this-&gt;size = size; for (int i = 0 ; i &lt; size; i++){ arr[i] = defaultVal; } } template&lt;typename AT&gt; AT*&amp; growVector&lt;AT&gt;::operator [](unsigned pos){ if (pos &gt;= size){ int newSize = size*2; AT** newArr = new AT*[newSize]; memcpy(newArr, arr, sizeof(AT)*size); for (int i = size; i&lt;newSize; i++) newArr[i] = defaultVal; size = newSize; delete arr; arr = newArr; } return arr[pos]; } //template&lt;typename AT&gt; //const AT*&amp; growVector&lt;AT&gt;::operator [](unsigned pos) const{ // if (pos &gt;= size) // throw std::range_error("index out of range in constant vector"); // } // return NULL; //} template&lt;typename AT&gt; int growVector&lt;AT&gt;::length(){ return size; } template&lt;typename AT&gt; growVector&lt;AT&gt;::~growVector(){ delete arr; } template&lt;typename AT&gt; void growVector&lt;AT&gt;::reset(int pos){ if (pos&gt;=size) throw new std::range_error("index out of bounds"); arr[pos] = defaultVal; } template&lt;typename AT&gt; void growVector&lt;AT&gt;::reset(){ for (int pos = 0; pos&lt;size; pos++) arr[pos] = defaultVal; } </code></pre> <p>...very basic.</p> <p>I use it in </p> <pre><code>int main() { growVector&lt;char&gt; gv(5, (char*)NULL); char* x = NULL; for (int i = 0; i&lt; 50; i++){ gv[i] = x; } gv.reset(); return 0; } </code></pre> <p>it compiles but the linker says:</p> <pre><code>Invoking: GCC C++ Linker g++ -pthread -o"base" ./src/base.o ./src/base/baseController.o ./src/base/baseThreads.o ./src/base/utils.o ./src/base/utils/utilClasses.o ./src/base.o: In function `main': /home/dario/workspace/base/Debug/../src/base.cpp:95: undefined reference to `baseUtils::growVector&lt;char&gt;::growVector(int, char*)' /home/dario/workspace/base/Debug/../src/base.cpp:98: undefined reference to `baseUtils::growVector&lt;char&gt;::operator[](unsigned int)' /home/dario/workspace/base/Debug/../src/base.cpp:100: undefined reference to `baseUtils::growVector&lt;char&gt;::reset()' /home/dario/workspace/base/Debug/../src/base.cpp:101: undefined reference to `baseUtils::growVector&lt;char&gt;::~growVector()' /home/dario/workspace/base/Debug/../src/base.cpp:101: undefined reference to `baseUtils::growVector&lt;char&gt;::~growVector()' collect2: ld returned 1 exit status </code></pre> <p>I'm really clueless</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload