template under gcc version 3.3.2

corey taylor corey.taylor@gmail.com
Sat Jan 29 22:44:00 GMT 2005


Morten,

  Well, if those are all the files you have, then the issue is simply
that you never implemented the Stack class methods that gcc throws out
as "undefined references."

  Only the method definitions are there which allow a compilation,
however the linker will error trying to connect the symbols to actual
code.

corey


On Sat, 29 Jan 2005 23:34:00 +0100, Morten Gulbrandsen
<f1000mhz@yahoo.de> wrote:
> corey taylor wrote:
> 
> >Morten,
> >
> >  First one note, I don't see you including anything for the std::deque type.
> >
> >  You should at least add: #include <deque>
> >
> >corey
> >
> >
> >
> >>g++ -ansi -pedantic -Wall -o stest5_test_00.out stest5_test_00.cpp -L
> >>/opt/sfw/gcc-3/lib/ -R /opt/sfw/gcc-3/lib/ -lstdc++
> >>stest5_test_00.cpp:11: error: syntax error before `;' token
> >>
> >>#include <iostream>
> >>#include <string>
> >>#include <cstdlib>
> >>
> >>// #include "stack5.hpp"
> >>
> >>template <typename T>
> >>class Stack {
> >>  private:
> >>    std::deque<T> elems;   // elements
> >>
> >>
> >
> >
> >
> OK   I did,
> 
> The preceeding code  files   are all good,
> 
> I also tried  www.comeaucomputing.com
> 
> 
> #include <iostream>
> #include <string>
> #include <cstdlib>
> 
> #include <deque>
> #include <vector>
> #include <stdexcept>
> 
> // #include "stack5.hpp"
> 
> //   these files are unchanged
> #include "stack5decl.hpp"
> #include "stack5assign.hpp"
> 
> 
> int main()
> {
>     try {
>         Stack<int>   intStack;       // stack of ints
>         Stack<float> floatStack;     // stack of floats
> 
>         // manipulate int stack
>         intStack.push(42);
>         intStack.push(7);
> 
>         // manipulate float stack
>         floatStack.push(7.7);
> 
>         // assign stacks of different type
>         floatStack = intStack;
> 
>         // print float stack
>         std::cout << floatStack.top() << std::endl;
>         floatStack.pop();
>         std::cout << floatStack.top() << std::endl;
>         floatStack.pop();
>         std::cout << floatStack.top() << std::endl;
>         floatStack.pop();
>     }
>     catch (std::exception const& ex) {
>         std::cerr << "Exception: " << ex.what() << std::endl;
>         return EXIT_FAILURE;  // exit program with ERROR status
>     }
> }
> 
> 
> /*
> 
> g++ -o stest5.out stest5.cpp -L /opt/sfw/gcc-3/lib -R /opt/sfw/gcc-3/lib
> -lstdc++
> 
> Undefined                       first referenced
>  symbol                             in file
> Stack<int>::push(int const&)        /var/tmp//ccy3WHcF.o
> Stack<float>::push(float const&)    /var/tmp//ccy3WHcF.o
> Stack<int>::pop()                   /var/tmp//ccy3WHcF.o
> Stack<float>::pop()                 /var/tmp//ccy3WHcF.o
> Stack<float>::top() const           /var/tmp//ccy3WHcF.o
> Stack<int>::top() const             /var/tmp//ccy3WHcF.o
> ld: fatal: Symbol referencing errors. No output written to stest5.out
> collect2: ld returned 1 exit status
> 
> g++ -v  -o stest5.out stest5.cpp -L /opt/sfw/gcc-3/lib -R
> /opt/sfw/gcc-3/lib -lstdc++
> Reading specs from /opt/sfw/gcc-3/lib/gcc-lib/i386-pc-solaris2.9/3.3.2/specs
> Configured with: ../gcc-3.3.2/configure --prefix=/opt/sfw/gcc-3
> --with-ld=/usr/ccs/bin/ld --with-as=/usr/ccs/bin/as --without-gnu-ld
> --without-gnu-as --enable-shared
> Thread model: posix
> gcc version 3.3.2
>  /opt/sfw/gcc-3/lib/gcc-lib/i386-pc-solaris2.9/3.3.2/cc1plus -quiet -v
> -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=2 stest5.cpp
> -D__GNUG__=3 -quiet -dumpbase stest5.cpp -auxbase stest5 -version -o
> /var/tmp//ccDX6SkL.s
> GNU C++ version 3.3.2 (i386-pc-solaris2.9)
>         compiled by GNU C version 3.3.2.
> GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32718
> ignoring nonexistent directory "/usr/local/include"
> ignoring nonexistent directory "/opt/sfw/gcc-3/i386-pc-solaris2.9/include"
> #include "..." search starts here:
> #include <...> search starts here:
>  /opt/sfw/gcc-3/include/c++/3.3.2
>  /opt/sfw/gcc-3/include/c++/3.3.2/i386-pc-solaris2.9
>  /opt/sfw/gcc-3/include/c++/3.3.2/backward
>  /opt/sfw/gcc-3/include
>  /opt/sfw/gcc-3/lib/gcc-lib/i386-pc-solaris2.9/3.3.2/include
>  /usr/include
> End of search list.
>  /usr/ccs/bin/as -V -Qy -s -o /var/tmp//cc7CpDtM.o /var/tmp//ccDX6SkL.s
> as: Sun Compiler Common 9.0 Patch 115114-02 2004/02/09
>  /opt/sfw/gcc-3/lib/gcc-lib/i386-pc-solaris2.9/3.3.2/collect2 -V -R
> /opt/sfw/gcc-3/lib -Y P,/usr/ccs/lib:/usr/lib -Qy -o stest5.out
> /opt/sfw/gcc-3/lib/gcc-lib/i386-pc-solaris2.9/3.3.2/crt1.o
> /opt/sfw/gcc-3/lib/gcc-lib/i386-pc-solaris2.9/3.3.2/crti.o
> /usr/ccs/lib/values-Xa.o
> /opt/sfw/gcc-3/lib/gcc-lib/i386-pc-solaris2.9/3.3.2/crtbegin.o -L
> /opt/sfw/gcc-3/lib -L/opt/sfw/gcc-3/lib/gcc-lib/i386-pc-solaris2.9/3.3.2
> -L/usr/ccs/bin -L/usr/ccs/lib
> -L/opt/sfw/gcc-3/lib/gcc-lib/i386-pc-solaris2.9/3.3.2/../../..
> /var/tmp//cc7CpDtM.o -lstdc++ -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s
> -lgcc /opt/sfw/gcc-3/lib/gcc-lib/i386-pc-solaris2.9/3.3.2/crtend.o
> /opt/sfw/gcc-3/lib/gcc-lib/i386-pc-solaris2.9/3.3.2/crtn.o
> ld: Software Generation Utilities - Solaris Link Editors: 5.9-1.385
> Undefined                       first referenced
>  symbol                             in file
> Stack<int>::push(int const&)        /var/tmp//cc7CpDtM.o
> Stack<float>::push(float const&)    /var/tmp//cc7CpDtM.o
> Stack<int>::pop()                   /var/tmp//cc7CpDtM.o
> Stack<float>::pop()                 /var/tmp//cc7CpDtM.o
> Stack<float>::top() const           /var/tmp//cc7CpDtM.o
> Stack<int>::top() const             /var/tmp//cc7CpDtM.o
> ld: fatal: Symbol referencing errors. No output written to stest5.out
> collect2: ld returned 1 exit status
> 
> */
> 
> best regards
> 
> Morten
> 
>



More information about the Gcc-help mailing list