2012-02-03 11 views
7

Tengo un problema con Eclipse Indigo quejándose de que los métodos de una clase no se podían resolver, pero compilando de todos modos y funcionando correctamente (AFAIK). Es un programa muy simple. Aquí está Population.cpp:El método Eclipse no se pudo resolver en un programa simple C++

#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"; 
} 

Ahora, creo ese código y todo está bien. En otro proyecto en Eclipse, llamaré a este código como este:

#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); 
} 

Como se puede ver también estoy corriendo el plugin lindo para TDD en C++. No se queja cuando declaro p como tipo Población y pasa la primera afirmación. Soy algo nuevo en C++, pero me aseguré de agregar el proyecto del que es Population.cpp a la ruta de inclusión para el proyecto de prueba.

No es un gran problema, ya que no está afectando a nada obvio para mí, pero sigue siendo muy molesto. No veo una situación en la que deba hacer esto.

¡Gracias por cualquier ayuda!

Respuesta

3

sizeof(pointer) devuelve el tamaño del puntero (4 en sistemas de 32 bits y 8 en 64 bits), no el tamaño de lo que apunta. Guarde las dimensiones en la clase y agregue una función para devolverlas.

Además, en initializePop ¿no debería asignar la matriz real X?

X = calloc(N, sizeof(char *)); 

O, más bien, se debe utilizar new para la asignación dado que está utilizando C++:

X = new char* [N]; 

y posterior:

X[i] = new char [numbits]; 
+0

Gracias por la punta! No responde la pregunta, pero el tamaño de la propina me ayudó. Supongo que he estado usando idiomas de nivel superior por mucho tiempo. Poco oxidado sobre lo básico así. Casi parece un truco almacenar simplemente los tamaños junto con la matriz en sí, pero supongo que si el tamaño de la matriz va a ser la entrada de la línea de comandos, no hay mejor manera de hacerlo en C++. –

10

Esto podría ser un problema de indexación relacionada con #include cabeceras externas extraviado. Siga los siguientes pasos y ver si ayuda:

  1. Ir a cada uno de su encargo #include (por ejemplo "cute.h") y pulse F3 (es decir, "Mostrar declaración"); ver si puede acceder a ese archivo o no; si no se copian esos archivos en alguna libreta
  2. Si no se puede acceder al archivo, ubíquelo en su estructura de directorio ; p.ej. "Cute.h" y "ah" se encuentran en, "C://Eclipse/MyWork/Workspace/Project/include_1" y "ide_listener.h" se encuentra en , "C://Eclipse/MyWork/Workspace/Project/include_2", luego copia ambos las rutas de las carpetas en alguna libreta
  3. dentro de Eclipse ir a Project -> Properties -> C/C++ General -> Paths and Sybmols; verá varias pestañas como Includes, Sybmols, Library Paths ...
  4. Haga clic en Library Paths -> Add -> Workspace... -> <locate the above folder paths> y presione OK
  5. Deje que el indexador reconstruya; ahora de nuevo siga el paso (1); esperemos los archivos deben ser accesibles
  6. Para futura seguridad para archivos más grandes, vaya a Window -> Preferences -> C/C++ -> Editor -> Scalability -> "Enable scalability mode when ..." y establecer el número de líneas a algún gran número, como 500000 y pulse "OK";

se necesita el último paso, porque cuando el archivo crece en número de línea y si excede el número anterior, entonces eclipse será dejar de mostrar las definiciones de algunos "escalabilidad" razones, a pesar de que habría indexado.

+0

Intenté revisar todas mis inclusiones y Eclipse puede encontrar todas las fuentes, por lo que parece que no es mi problema. –

+0

No veo las "Rutas de biblioteca" en Rutas y símbolos en mi ADT. ¿Alguien sabe a dónde se mueve esto ahora? Gracias. – inder

+0

@inder, ¿quiso decir 'Windows> Preferencias> Depurar/Liberar> Ruta de búsqueda de origen'? – iammilind

19

Prueba esto:

En la ventana Explorador de proyectos, haga clic derecho en su proyecto -> Índice -> Reconstruir

Cuestiones relacionadas