0

So I have a vector of arrays of pointers to floats. I am trying to push back an array of null pointers of type float*. When I do, I get an error which I will post at the end. Here is teh code:

#include <iostream>
#include <math.h>
#include <vector>
#include <tr1/array>

using namespace std;

typedef vector< tr1::array<float* , 2> > polygon;

void triangle_solver(float*,float*,float*,float*,float*,float*);//Prototype function for solving triangles, 6 floats for 3 sides and 3 angles
void polygon_solver(polygon poly);
void displayPoly(polygon);
int main()
{
    polygon test;
    cout << test.size() << endl;
    //polygon_solver(test);
    return 0;
}

void displayPoly(polygon poly)
{
        for (polygon::iterator it = poly.begin(); it != poly.end(); it++)
        {
            for (int c=0; c<2; c++)
            {
                if ((*it)[c]) cout << *(*it)[c] << endl;
                else cout << '?' << endl;
            }
        }
}

void polygon_solver(polygon poly)
{
    if (poly.size() > 3)
    {

        float *a1 = NULL;
        float *a3 = NULL;
        float *s2 = NULL;
        polygon sub(poly.begin()+2, poly.end()-1);
        float *A1 = NULL;
        float *A3 = NULL;
        float *S2 = NULL;
        sub.push_back({A1, S2});                //ERROR HERE
        float *aA3 = poly[2][1];
        float *aA1 = poly[0][1];
        cout << "Sub Polygon: " << endl;
        displayPoly(sub); cout << endl;
        for (int c=0; c<1; c++)
        {
            triangle_solver(a1, poly[1][1], a3, poly[1][0], s2, poly[0][1]);
            polygon_solver(sub);
        }
        cout << "Polygon: " << endl;
        displayPoly(poly); cout << endl;
    }
}

I am using NULL to represent unknowns (is this standard?) Note that it compiles in code blocks but does not run, and also will not compile by running gcc at the command line. Here is the error:

main.cpp: In function ‘void polygon_solver(polygon)’:
main.cpp:45:23: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
         sub.push_back({A1, S2});
                       ^
main.cpp:45:31: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
         sub.push_back({A1, S2});
                               ^
/tmp/ccZsz9el.o: In function `main':
main.cpp:(.text+0x25): undefined reference to `std::cout'
main.cpp:(.text+0x2a): undefined reference to `std::ostream::operator<<(unsigned long)'
main.cpp:(.text+0x2f): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
main.cpp:(.text+0x37): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/tmp/ccZsz9el.o: In function `displayPoly(std::vector<std::tr1::array<float*, 2ul>, std::allocator<std::tr1::array<float*, 2ul> > >)':
main.cpp:(.text+0xf4): undefined reference to `std::cout'
main.cpp:(.text+0xf9): undefined reference to `std::ostream::operator<<(float)'
main.cpp:(.text+0xfe): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
main.cpp:(.text+0x106): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
main.cpp:(.text+0x112): undefined reference to `std::cout'
main.cpp:(.text+0x117): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)'
main.cpp:(.text+0x11c): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
main.cpp:(.text+0x124): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/tmp/ccZsz9el.o: In function `polygon_solver(std::vector<std::tr1::array<float*, 2ul>, std::allocator<std::tr1::array<float*, 2ul> > >)':
main.cpp:(.text+0x2f5): undefined reference to `std::cout'
main.cpp:(.text+0x2fa): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
main.cpp:(.text+0x2ff): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
main.cpp:(.text+0x307): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
main.cpp:(.text+0x343): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
main.cpp:(.text+0x348): undefined reference to `std::cout'
main.cpp:(.text+0x34d): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
main.cpp:(.text+0x431): undefined reference to `std::cout'
main.cpp:(.text+0x436): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
main.cpp:(.text+0x43b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
main.cpp:(.text+0x443): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
main.cpp:(.text+0x476): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
main.cpp:(.text+0x47b): undefined reference to `std::cout'
main.cpp:(.text+0x480): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/tmp/ccZsz9el.o: In function `__static_initialization_and_destruction_0(int, int)':
main.cpp:(.text+0x555): undefined reference to `std::ios_base::Init::Init()'
main.cpp:(.text+0x564): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccZsz9el.o: In function `std::vector<std::tr1::array<float*, 2ul>, std::allocator<std::tr1::array<float*, 2ul> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::tr1::array<float*, 2ul>*, std::vector<std::tr1::array<float*, 2ul>, std::allocator<std::tr1::array<float*, 2ul> > > >, std::tr1::array<float*, 2ul> const&)':
main.cpp:(.text._ZNSt6vectorINSt3tr15arrayIPfLm2EEESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_[_ZNSt6vectorINSt3tr15arrayIPfLm2EEESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_]+0x271): undefined reference to `__cxa_end_catch'
main.cpp:(.text._ZNSt6vectorINSt3tr15arrayIPfLm2EEESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_[_ZNSt6vectorINSt3tr15arrayIPfLm2EEESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_]+0x284): undefined reference to `__cxa_begin_catch'
main.cpp:(.text._ZNSt6vectorINSt3tr15arrayIPfLm2EEESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_[_ZNSt6vectorINSt3tr15arrayIPfLm2EEESaIS3_EE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPS3_S5_EERKS3_]+0x2ec): undefined reference to `__cxa_rethrow'
/tmp/ccZsz9el.o: In function `std::vector<std::tr1::array<float*, 2ul>, std::allocator<std::tr1::array<float*, 2ul> > >::_M_check_len(unsigned long, char const*) const':
main.cpp:(.text._ZNKSt6vectorINSt3tr15arrayIPfLm2EEESaIS3_EE12_M_check_lenEmPKc[_ZNKSt6vectorINSt3tr15arrayIPfLm2EEESaIS3_EE12_M_check_lenEmPKc]+0x4c): undefined reference to `std::__throw_length_error(char const*)'
/tmp/ccZsz9el.o: In function `__gnu_cxx::new_allocator<std::tr1::array<float*, 2ul> >::deallocate(std::tr1::array<float*, 2ul>*, unsigned long)':
main.cpp:(.text._ZN9__gnu_cxx13new_allocatorINSt3tr15arrayIPfLm2EEEE10deallocateEPS4_m[_ZN9__gnu_cxx13new_allocatorINSt3tr15arrayIPfLm2EEEE10deallocateEPS4_m]+0x1c): undefined reference to `operator delete(void*)'
/tmp/ccZsz9el.o: In function `__gnu_cxx::new_allocator<std::tr1::array<float*, 2ul> >::allocate(unsigned long, void const*)':
main.cpp:(.text._ZN9__gnu_cxx13new_allocatorINSt3tr15arrayIPfLm2EEEE8allocateEmPKv[_ZN9__gnu_cxx13new_allocatorINSt3tr15arrayIPfLm2EEEE8allocateEmPKv]+0x2c): undefined reference to `std::__throw_bad_alloc()'
main.cpp:(.text._ZN9__gnu_cxx13new_allocatorINSt3tr15arrayIPfLm2EEEE8allocateEmPKv[_ZN9__gnu_cxx13new_allocatorINSt3tr15arrayIPfLm2EEEE8allocateEmPKv]+0x3c): undefined reference to `operator new(unsigned long)'
/tmp/ccZsz9el.o:(.eh_frame+0x4b): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status
PyRulez
  • 10,513
  • 10
  • 42
  • 87
  • Looks like you are missing the basic, or fundamental, C++ run-time library. What platform are you using? Are you using IDE or command line? – Thomas Matthews Mar 01 '15 at 20:57
  • Possible duplicate: [unresolved external symbol and how to fix](http://stackoverflow.com/questions/15819095/unresolved-external-symbol-how-to-fix) – Thomas Matthews Mar 01 '15 at 20:58
  • Possible duplicate: [What is an undefined symbol](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix) – Thomas Matthews Mar 01 '15 at 21:00
  • Possible duplicate: [undefined symbol cout](http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB8QFjAA&url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F10803685%2Feclipse-cdt-symbol-cout-could-not-be-resolved&ei=9X3zVI-8H8z3oASKpYLIDQ&usg=AFQjCNG-EbqYAA0v7m7ZfTFoZozkf8gy-A&sig2=QO-hVpyxRv0nEDpRWASXyw) – Thomas Matthews Mar 01 '15 at 21:01
  • @ThomasMatthews I tried it with both Codeblocks IDE and gcc from the command line. Neither could run. – PyRulez Mar 01 '15 at 21:04
  • What is the command line syntax used by Codeblocks IDE or gcc? – Thomas Matthews Mar 01 '15 at 21:14
  • 2
    You most likely accidentally link with `gcc` instead of `g++`. – Baum mit Augen Mar 01 '15 at 21:17

1 Answers1

2

Your error log points out a warning, and a linkage error.

1) Your 2 first warnings says that your are using c++11 features, while not specifying to compile with c++11 standart. Warnings does not stop the compilation, unless you use the -Werror flag. But you should still fix them by adding -std=c++11 in your compilation line.

2) Your linkage error simply tells you that linker couldn't find std::cout. That is because gcc does not link correctly the C++'s std library. Add this flag : -lstdc++, or use g++ instead (source : Compiling a C++ program with gcc)

Community
  • 1
  • 1