请查看以下文件:(这是一个完整的文件)
#ifndef TEES_ALGORITHM_LIBRARY_WRAPPER_H
#define TEES_ALGORITHM_LIBRARY_WRAPPER_H
#ifdef _TEES_COMPILE_AS_LIB
#include <dfa\Includes\DFC_algorithms.hpp>
#include <DFA\FuzzyClassifier\FuzzyAlgorithmIntialization\InitFuzzyAlgorithm.hpp>
typedef teesalgorithm::tees_fuzzy_algorithms algorithms_switchyard_class;
#else
#include <DFA\Includes\commercial_algorithms.hpp>
//An incomplete class to hide implementation
class algorithms_switchyard_class;
#endif
class AlgorithmLibraryWrapper {
algorithms_switchyard_class * algorithmPtr_;
typedef teesalgorithm::tees_paramObj paramObj_type;
typedef teesalgorithm::tees_errorObj errorObj_type;
typedef teesalgorithm::tees_statusObj statusObj_type;
typedef teesalgorithm::tees_dataObj dataObj_type;
typedef teesalgorithm::tees_outputObj outputObj_type;
public:
AlgorithmLibraryWrapper(const std::string& sAlgName, paramObj_type& paramObj, errorObj_type& errObj, statusObj_type& statusObj, const char* sFilePath);
static bool dataReader(const std::string& sFileName, dataObj_type& dataObj, errorObj_type& errObj, statusObj_type& statusObj);
bool runalgorithm(const dataObj_type& dataObj, outputObj_type& outObj, errorObj_type& errObj, statusObj_type& statusObj);
~AlgorithmLibraryWrapper();
};
#ifdef _TEES_USE_COMPILED_ALGORITHM_LIB
# ifdef _MSC_VER
#if _MSC_VER < 1400 // If VC 2003
#ifdef _DEBUG
#error No AlgorithmLibWrapper libraries compiled for this version of VC
#else
#error No AlgorithmLibWrapper libraries compiled for this version of VC
#endif
#elif defined(UNDER_CE) // Win CE
#ifdef _DEBUG
#pragma comment( lib, "AlgorithmLibWrapperCEd" )
#else
#pragma comment( lib, "AlgorithmLibWrapperCE" )
#endif
#else // If VC 2005
#ifdef _DEBUG
#pragma comment( lib, "AlgorithmLibWrapperd" )
#else
#pragma comment( lib, "AlgorithmLibWrapper" )
#endif
#endif
#endif
#endif
#endif //TEES_ALGORITHM_LIBRARY_WRAPPER_H
我收到以下错误;我不知道为什么。我也手动计算了预处理程序指令。
AlgorithmLibraryWrapper.hpp:10:1:未终止的#ifdef
AlgorithmLibraryWrapper.hpp:7:1:未终止的#ifndef
我使用的是糟糕的vxWorks gcc编译器。如果故障是我的或编译器,请告诉我。
答案 0 :(得分:4)
可能是问题出在所包含的文件中(如果实际上存在未填充的#if
/ #endif
。
我会尝试使用其他编译器进行预处理。你可以使用gcc,不管它不会编译。只需获取gcc(如果你在Windows上,则为MinGW)并运行
cpp -Iinclude_direcories your_file
或者,如果您不喜欢gcc,请获取MSVC Express版本。同样,您可以预处理甚至无法编译的代码,因此非工作库等没有问题。
大多数编译器都有一个选项,可以为您提供预处理器的输出,以便您可以检查它正在做什么。例如,
gcc -E file.c >file.preproc
将为您提供预处理的来源,以便您可以检查#if与#endif的平衡。
答案 1 :(得分:3)
猜测,你在#include的一个文件中有一个不匹配的#ifdef / #endif对。您需要查看所有文件(如预处理器所做的那样),而不仅仅是这个文件。
答案 2 :(得分:1)
正如其他人所指出的那样,这很可能是因为包括警卫不匹配。
如果您所包含的文件在您的控制之下(即不属于第三方封闭源库),您可以考虑更换#ifndef等。人。使用#pragma一次保护(用于防止多次包含)。这将消除预处理器指令不匹配的可能性。
有一点需要注意的是pragma once是非标准的,因此只有在编译器支持它时它才会起作用。
答案 3 :(得分:0)
我尝试使用vs 6.0编译你的源代码,但没有得到你提到的错误。正如其他人所说,可能是错误来自包含的头文件。为了让我编译你的代码,我需要评论上面的标题。
请检查上面的标题。
答案 4 :(得分:0)
我通过逐个注释掉部分并试图找出导致错误的部分来调试它。
可能是您的编译器不喜欢嵌套的#ifdefs或者没有正确解释语法。也许它不喜欢#pragmas。
答案 5 :(得分:0)
这是一个很长的镜头,但在你的源文件中你有以下一行:
# ifdef _MSC_VER
“#
”字符和指令名称(ifdef
)之间有空格。这在C / C ++中有效;然而,它并不常见,所以如果奇怪的编译器在它上面窒息,我不会感到非常惊讶。