Ошибка: метод не был объявлен в этой области (но он включен) - PullRequest
0 голосов
/ 11 сентября 2011

У меня есть две папки, f1 и f2, и они находятся на одном уровне (имеют одну и ту же папку для родителей). В f1 у меня есть исходный код моего проекта, а в f2 у меня есть юнит-тесты.

Проблема возникает, когда я пытаюсь включить файл из моего проекта в класс модульного тестирования. Я просто получаю это:

natty:/tmp/test/f2$ qmake-qt4 .
natty:/tmp/test/f2$ make
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I/usr/include/qt4/QtTest -I../f1 -I. -o main.o main.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I/usr/include/qt4/QtTest -I../f1 -I. -o tcommon.o tcommon.cpp
tcommon.cpp: In member function ‘void tcommon::tCalculateMD5_str()’:
tcommon.cpp:21:50: error: ‘CalculateMD5’ was not declared in this scope
tcommon.cpp: In member function ‘void tcommon::tCalculateMD5_uint()’:
tcommon.cpp:43:50: error: ‘CalculateMD5’ was not declared in this scope
make: *** [tcommon.o] Error 1

Что происходит? Код в соответствующих файлах: test/f2/tcommon.cpp:

#include "tcommon.h"
#include <common.h>

// ...

void tcommon::tCalculateMD5_str()
{
    QFETCH(QString, string);
    QFETCH(QString, result);

    // THIS IS LINE 21 <-----------------------------------------------
    QCOMPARE(CalculateMD5(string), result);
}
// ...

А вот common.h из test/f1/common.h (включение найдено просто отлично):

#ifndef COMMON_H
#define COMMON_H

#include <QtCore>

QString CalculateMD5(uint number);
QString CalculateMD5(QString str);

#endif // COMMON_H

Вот проект, который не будет компилироваться (3 КБ): http://www.xx77abs.com/test2.rar

1 Ответ

3 голосов
/ 11 сентября 2011

Ваша проблема в том, что вы дублировали защиту заголовков из f1 / common.h в f2 / tcommon.h.

Измените их на (в tcommon.h):

#ifndef TCOMMON_H
#define TCOMMON_H

//...

#endif // TCOMMON_H

и проблема исправлена, программа собирается, и вы можете запустить ее. В ответ: fixed.zip (см. источник этого ответа )

...