0

I'm pretty proficient with Java but am not sure what's going on with pointers, classes, or imports/includes in C++. I originally had a size() function but I was getting error about it conflicting with my 'int size;' variable. Can functions not share the same name as variables? I renamed it to getsize but I'm still not sure why this isn't working or what exactly is going on. Error message at bottom.

Not real sure what #ifndef/#define/#endif are for exactly either. Seems to be a safeguard so that files aren't included twice?

THANKS!

main.cpp

#include <iostream>
#include "LList.h"

using namespace std;

int main() {

 cout << "Hello World" << endl;
 LList* l = new LList();
 cout << l->getsize() << endl;
 return 0;
}

LList.h

#ifndef LLISTH
#define LLISTH

class LList {

 private:

  int size;

 public:

  LList();
  int getsize();

};

#endif

LList.cpp

#ifndef LLISTCPP
#define LLISTCPP

#include "LList.h"

LList::LList() {
 this->size = 0;
}

int LList::getsize() {
 return this->size;
}

#endif

[bletchley@mikey test]$ g++ main.cpp LList.cpp -o -Wall Main

Error:

main.cpp: In function âint main()â:
main.cpp:10: error: request for member âgetsizeâ in âlâ, which is of non-class type âLList ()()â

3
Contributors
5
Replies
6
Views
6 Years
Discussion Span
Last Post by jonsca
0

i would try changing this

LList::LList() {
 this->size = 0;
}

// to
LList::LList()
{
       size = 0;
}

// and

int LList::getsize() {
 return this->size;
}

// to

int LList::getsize()
{
       return size;
}
0

(.text+0x1d4): multiple definition of `LList::LList()'
/tmp/ccnu19Pg.o:LList.cpp:(.text+0x0): first defined here
Main: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o:(.text+0x0): first defined here
Main:(.rodata+0x0): multiple definition of `_fp_hw'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o:(.rodata+0x0): first defined here
Main: In function `_fini':
(.fini+0x0): multiple definition of `_fini'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crti.o:(.fini+0x0): first defined here
Main:(.rodata+0x4): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o:(.rodata.cst4+0x0): first defined here
Main: In function `__data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o:(.data+0x0): first defined here
Main: In function `LList::LList()':
(.text+0x1e2): multiple definition of `LList::LList()'
/tmp/ccnu19Pg.o:LList.cpp:(.text+0xe): first defined here
Main:(.rodata+0x8): multiple definition of `__dso_handle'
/usr/lib/gcc/i386-redhat-linux/4.1.2/crtbegin.o:(.rodata+0x0): first defined here
Main: In function `main':
(.text+0x146): multiple definition of `main'
/tmp/ccCfFhGo.o:main.cpp:(.text+0x72): first defined here
/usr/bin/ld: Warning: size of symbol `main' changed from 183 in /tmp/ccCfFhGo.o to 140 in Main
Main: In function `_init':
(.init+0x0): multiple definition of `_init'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crti.o:(.init+0x0): first defined here
/usr/lib/gcc/i386-redhat-linux/4.1.2/crtend.o:(.dtors+0x0): multiple definition of `__DTOR_END__'
Main:(.dtors+0x4): first defined here
collect2: ld returned 1 exit status

0

Got it to work by changing the include in main.cpp from "LList.h" to "LList.cpp" and only doing "g++ Main.cpp -o Main".

0

None of the examples I've looked at have includes to .cpp files, only .h files. Is this bad style?

0

Got it to work by changing the include in main.cpp from "LList.h" to "LList.cpp" and only doing "g++ Main.cpp -o Main".

In this situation you should have left it as #include "LList.h" and compiled it as g++ LList.cpp Main.cpp -o Main that way LList.cpp gets compiled first.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.