Reputation: 1021
I have an issue with Eclipse Indigo complaining that methods of a class couldn't be resolved, but compiling anyway and working correctly (AFAIK). It's a very simple program. Here is Population.cpp:
#include <stdlib.h>
#include <iostream>
#include <time.h>
#include "Population.h"
Population::Population() {
// TODO Auto-generated constructor stub
}
Population::~Population() {
// TODO Auto-generated destructor stub
}
void Population::initializePop(int numBits, int N) {
srand((unsigned)time(0));
for(int i=0; i<N; i++) {
x[i] = (char*) calloc(numBits, sizeof(char));
for(int j=0; j<numBits; j++) {
if( rand() < 0.5 )
x[i][j] = 0;
else
x[i][j] = 1;
}
}
}
char** Population::getX() {
return x;
}
void Population::printStuff() {
std::cout << "Whatever";
}
Now, I build that code and everything is fine. In another project within Eclipse, I'm calling this code like this:
#include <typeinfo>
#include <string.h>
#include <iostream>
#include "cute.h"
#include "ide_listener.h"
#include "cute_runner.h"
#include "Population.cpp"
void testPopulationGeneration() {
Population* p = new Population;
int N = 10;
int bits = 4;
char** pop;
ASSERTM("Population variable improperly initialized", dynamic_cast<Population*>(p));
std::cout << p->printStuff();
std::cout << "Ok...";
p->initializePop(bits, N);
pop = p->getX();
ASSERTM("Pop not correct size.", sizeof(pop) == 10);
}
As you can see I'm also running the CUTE plugin for TDD in C++. It doesn't complain when I declare p as type Population and the first assertion passes. I'm somewhat new to C++, but I did make sure to add the project that Population.cpp is from to the include path for the test project.
It's not a huge deal as it's not affecting anything obvious to me, but it's still very annoying. I don't see a situation where it should do this.
Thanks for any help!
Upvotes: 7
Views: 43207
Reputation: 11
Not that i'm any expert at all but i just had a similar problem using.empty for whatever reason it will work if you change char to string minor change but resolved the issue on my program
Upvotes: 1
Reputation: 489
Try this:
In your project explorer window, right click on your project -> Index -> Rebuild
Upvotes: 21
Reputation: 70030
This could be an indexing issue related to external #include
headers not found. Follow the steps below and see if it helps:
#include
(e.g. "cute.h"
) and press
F3
(i.e. "Show declaration"); see if it's able to access that file
or not; if not copy those files on some notepadC://Eclipse/MyWork/Workspace/Project/include_1
" and
"ide_listener.h" is located
at,"C://Eclipse/MyWork/Workspace/Project/include_2
", then copy both
the folder paths on some notepadProject -> Properties -> C/C++ General ->
Paths and Sybmols
; you will see several tabs as Includes
,
Sybmols
, Library Paths
...Library Paths -> Add -> Workspace... -> <locate the above
folder paths>
and press OKWindow -> Preferences ->
C/C++ -> Editor -> Scalability -> "Enable scalability mode when
..."
and set the number of lines to some big number such as
500000
and press "OK";The last step is needed, because when your file grows in line number and if exceeds the above number then eclipse will stop showing definitions for some "scalability" reasons, even though it would have indexed.
Upvotes: 10
Reputation: 409356
sizeof(pointer)
returns the size of the pointer (4 on 32-bit systems and 8 on 64-bit), not the size of what it points to! Save the dimensions in the class, and add a function to return them.
Also, in initializePop
shouldn't you allocate the actual X
array?
X = calloc(N, sizeof(char *));
Or rather, you should use new
for allocation since you are using C++:
X = new char* [N];
and later:
X[i] = new char [numbits];
Upvotes: 3