2012-02-03 11 views
7

Mam problem z Eclipse Indigo narzekającym, że metody klasy nie mogą zostać rozwiązane, ale kompilacja i tak działa poprawnie (AFAIK). To bardzo prosty program. Oto Population.cpp:Metoda Eclipse nie mogła zostać rozwiązana w prostym programie 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"; 
} 

Teraz buduję ten kod i wszystko jest w porządku. W innym projekcie w Eclipse, dzwonię ten kod tak:

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

Jak widać jestem też działa cute plugin dla TDD w języku C++. Nie narzeka, gdy deklaruję p jako populację typu i pierwsze potwierdzenia zdania. Jestem trochę nowy w C++, ale dopilnowałem, aby dodać projekt, do którego należy Population.cpp, do ścieżki dołączania do projektu testowego.

To nie jest wielka sprawa, ponieważ nie ma wpływu na nic oczywistego, ale nadal jest bardzo denerwujące. Nie widzę sytuacji, w której powinien to zrobić.

Dzięki za pomoc!

Odpowiedz

3

sizeof(pointer) zwraca rozmiar wskaźnika (4 w systemach 32-bitowych i 8 w 64-bitach), a nie rozmiar tego, co wskazuje! Zapisz wymiary w klasie i dodaj funkcję, która je zwróci.

Ponadto, w initializePop nie należy przydzielać rzeczywistej tablicy X?

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

Albo raczej, należy użyć new alokacji ponieważ używasz C++:

X = new char* [N]; 

i nowszych:

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

Dzięki za cynk! Nie odpowiada na pytanie, ale rozmiar końcówki pomógł mi. Wydaje mi się, że używam języków wyższego poziomu przez zbyt długi czas. Trochę zardzewiałych na takich podstawach. Wygląda na to, że po prostu przechowywanie rozmiarów wraz z samą tablicą jest proste, ale domyślam się, że jeśli rozmiar tablicy ma być wprowadzony za pomocą wiersza poleceń, nie ma lepszego sposobu na zrobienie tego w C++. –

10

To może być problemem indeksowania związane z zewnętrznymi #include nagłówkami nie znaleziono. Postępuj zgodnie z poniższymi wskazówkami i zobacz czy to pomaga:

  1. Przejść do każdego swojego zwyczaju #include (np "cute.h") i naciśnij F3 (czyli „Pokaż deklarację”); sprawdź, czy jest w stanie uzyskać dostęp do tego pliku lub nie; jeśli nie, skopiuj te pliki do notatnika
  2. Jeśli plik nie jest dostępny, zlokalizuj ścieżki w strukturze katalogów ; na przykład „Cute.h” i „ach” znajdują się, „C://Eclipse/MyWork/Workspace/Project/include_1” i „ide_listener.h” znajduje się na „C://Eclipse/MyWork/Workspace/Project/include_2”, a następnie skopiować oba ścieżki folderu na jakiś notes
  3. Wewnątrz Eclipse przejść do Project -> Properties -> C/C++ General -> Paths and Sybmols; zobaczysz kilka zakładek jako Includes, Sybmols, Library Paths ...
  4. Kliknij przycisk Library Paths -> Add -> Workspace... -> <locate the above folder paths> i naciśnij OK.
  5. Pozwól na odbudowę indeksu; teraz ponownie wykonaj krok (1); Mam nadzieję, że pliki będą dostępne pod numerem . Pliki powinny być dostępne.
  6. Dla przyszłego bezpieczeństwa większych plików, przejdź do Window -> Preferences -> C/C++ -> Editor -> Scalability -> "Enable scalability mode when ..." i ustaw liczbę linii na dużą liczbę, taką jak 500000 i naciśnij "OK";

Ostatnim krokiem jest potrzebna, bo gdy plik rośnie liczba linii, a jeśli przekroczy powyższy numer wtedy zaćmienie przestanie wyświetlać definicje dla niektórych „skalowalności” powodów, chociaż byłoby indeksowane.

+0

Próbowałem przeglądać wszystkie moje załączniki, a Eclipse może znaleźć wszystkie źródła, więc wydaje się, że nie jest to mój problem. –

+0

Nie widzę "Ścieżek biblioteki" w ścieżkach i symbolach na moim ADT. Czy ktoś wie, dokąd się to przenosi? Dzięki. – inder

+0

@inder, masz na myśli "Windows> Preferencje> Debugowanie/Uwolnienie> Ścieżka wyszukiwania źródła"? – iammilind

19

Spróbuj tego:

w oknie Project Explorer, kliknij prawym przyciskiem myszy na projekcie -> Główna -> Rebuild

Powiązane problemy