Метод Eclipse не может быть решен в простой программе C ++ - PullRequest
7 голосов
/ 03 февраля 2012

У меня есть проблема с Eclipse Indigo, которая жаловалась на то, что методы класса не могут быть решены, но все равно компилируются и работают правильно (AFAIK).Это очень простая программа.Вот 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";
}

Теперь я создаю этот код, и все в порядке.В другом проекте в Eclipse я называю этот код следующим образом:

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

Как вы можете видеть, я также запускаю плагин CUTE для TDD в C ++.Он не жалуется, когда я объявляю p типом Population, и первое утверждение проходит.Я немного новичок в C ++, но я обязательно добавил проект, из которого создан Population.cpp, в путь включения для тестового проекта.

Это не так уж сложно, поскольку это не влияет на что-либо очевидное дляменя, но это все еще очень раздражает.Я не вижу ситуации, когда он должен это делать.

Спасибо за любую помощь!

Ответы [ 3 ]

21 голосов
/ 03 октября 2013

Попробуйте:

В окне проводника проекта щелкните правой кнопкой мыши свой проект -> Индекс -> Перестроить

10 голосов
/ 03 февраля 2012

Это может быть проблема с индексированием, связанная с не найденными внешними #include заголовками. Следуйте инструкциям ниже и посмотрите, поможет ли это:

  1. Перейдите к каждому из ваших пользовательских #include (например, "cute.h") и нажмите F3 (т.е. "Показать декларацию"); посмотреть, сможет ли он получить доступ к этому файлу или нет; если нет, скопируйте эти файлы в блокнот
  2. Если файл недоступен, найдите его пути в вашем структура каталогов; например «cute.h» и «a.h» расположены по адресу, "C://Eclipse/MyWork/Workspace/Project/include_1" и "ide_listener.h" находится в "C://Eclipse/MyWork/Workspace/Project/include_2", затем скопируйте оба пути к папкам в блокноте
  3. Внутри Затмения перейдите к Project -> Properties -> C/C++ General -> Paths and Sybmols; Вы увидите несколько вкладок как Includes, Sybmols, Library Paths ...
  4. Нажмите Library Paths -> Add -> Workspace... -> <locate the above folder paths> и нажмите OK
  5. Пусть индексатор перестроится; теперь снова выполните шаг (1); с надеждой файлы должны быть доступны
  6. Для обеспечения безопасности больших файлов в будущем перейдите на Window -> Preferences -> C/C++ -> Editor -> Scalability -> "Enable scalability mode when ..." и установите количество строк в какое-то большое число, например 500000 и нажмите «ОК»;

Последний шаг необходим, потому что, когда ваш файл увеличивается в номере строки и, если он превышает указанное выше число, то eclipse перестанет показывать определения по некоторым причинам « масштабируемость », даже если бы он был проиндексирован. 1032 *

3 голосов
/ 03 февраля 2012

sizeof(pointer) возвращает размер указателя (4 в 32-разрядных системах и 8 в 64-разрядных), а не размер, на который он указывает!Сохраните измерения в классе и добавьте функцию для их возврата.

Кроме того, в initializePop не следует ли выделять фактический массив X?

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

Вернее, вы должны использовать new для выделения, так как вы используете C ++:

X = new char* [N];

и позже:

X[i] = new char [numbits];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...