C++ 错误:此范围中未声明方法(但已包含该方法)

C++ 错误:此范围中未声明方法(但已包含该方法),c++,unit-testing,qt,compiler-errors,subdirectory,C++,Unit Testing,Qt,Compiler Errors,Subdirectory,我有两个文件夹,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/sh

我有两个文件夹,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);
}
// ...
以下是无法编译的项目(3 kb):

您的问题是您复制了f2/tcommon.h中f1/common.h的页眉保护

将这些更改为(在tcommon.h中):


问题解决了,程序会生成,您可以运行它。作为回应:
fixed.zip
(请参阅)

您的问题是您在f2/tcommon.h中复制了f1/common.h中的标题保护

将这些更改为(在tcommon.h中):


问题解决了,程序会生成,您可以运行它。作为回应:
fixed.zip
(参见)

(a)是的,那是我不好的、错误的词:p(b)OK。(c) 你能告诉我怎么做,或者给我一个链接什么的,这样我可以进一步研究??(d) 你可以把它拆开,你会得到一个不起作用的例子。。。在我的问题中,我认为这比复制/粘贴代码要好。@xx77aBs:我刚刚解决了你的问题。你的问题确实令人费解,描述在某种程度上被误导了。然而,你确实有一个真实的、合法的、可以理解的问题。我希望你能学到很多关于C:)@xx77aBs的很酷的东西:创建是解决编程问题的合适机制。99.99999999%的代码将与手头的问题完全无关。@Tomalak:我认为你不太公平。我怀疑你是否真的看过代码。这是79行(稀疏)代码。它基本上是一个经过调整的hello world控制台应用程序。OP认为文件夹结构很重要,这一事实要求他建立一个档案,而不是张贴79行。@sehe:不,我根本没有看它。因此,问题应该是独立的;把它的一部分放在别处是不合适的,而且容易链接腐烂。(a)是的,这是我不好的,错误的词:P(b)OK。(c) 你能告诉我怎么做,或者给我一个链接什么的,这样我可以进一步研究??(d) 你可以把它拆开,你会得到一个不起作用的例子。。。在我的问题中,我认为这比复制/粘贴代码要好。@xx77aBs:我刚刚解决了你的问题。你的问题确实令人费解,描述在某种程度上被误导了。然而,你确实有一个真实的、合法的、可以理解的问题。我希望你能学到很多关于C:)@xx77aBs的很酷的东西:创建是解决编程问题的合适机制。99.99999999%的代码将与手头的问题完全无关。@Tomalak:我认为你不太公平。我怀疑你是否真的看过代码。这是79行(稀疏)代码。它基本上是一个经过调整的hello world控制台应用程序。OP认为文件夹结构很重要,这一事实要求他建立一个档案,而不是张贴79行。@sehe:不,我根本没有看它。因此,问题应该是独立的;在其他地方托管它的一部分是不合适的,并且容易链接腐烂。如果这导致链接器错误,那么一定是一个非常奇怪的代码布局。头文件中的函数定义,以及不同头文件中相同函数的声明?@Tomalak:nope,只有两个具有相同头保护的不相关头。你知道这是怎么回事:头包含了第一个winsOh,顺便说一下,这不是一个链接器错误;未声明的,不是未定义的,也不是未解决的,这一切都不同。所以问题中给出的唯一具体信息是完全错误的。@sehe非常感谢!!我一定是监督过这件事(该死的,把所有的东西都换成深夜编码:P)。(==致所有人==)谢谢您的评论。我将尝试使用您的所有建议:)如果这导致链接器错误,那么代码布局一定很奇怪。头文件中的函数定义,以及不同头文件中相同函数的声明?@Tomalak:nope,只有两个具有相同头保护的不相关头。你知道这是怎么回事:头包含了第一个winsOh,顺便说一下,这不是一个链接器错误;未声明的,不是未定义的,也不是未解决的,这一切都不同。所以问题中给出的唯一具体信息是完全错误的。@sehe非常感谢!!我一定是监督过这件事(该死的,把所有的东西都换成深夜编码:P)。(==致所有人==)谢谢您的评论。我会尽量利用你的建议:)
#ifndef COMMON_H
#define COMMON_H

#include <QtCore>

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

#endif // COMMON_H
#ifndef TCOMMON_H
#define TCOMMON_H

//...

#endif // TCOMMON_H