fuzzylite visual c ++奇怪的行为

时间:2016-02-25 06:26:29

标签: c++ visual-c++

我的问题很奇怪。 在visual c++我想使用fuzzylite library创建一个dll。 当我创建使用表单(myclass.hmyclass.cpp)中的库的类时,项目编译得很好。 和{fuzzylite标题包含在myclass.h

但如果我在#include “stdafx.h”的顶部添加(myclass.cpp)或将#include “fl/Headers.h”添加到stdafx.h,我就会100 errors。 任何想法?

更新1:

//FuzzyCalc.h
#pragma once
#define __DLL_EXPORTS
#ifdef __DLL_EXPORTS
#define __DLL_API __declspec(dllexport) 
#else
#define __DLL_API __declspec(dllimport) 
#endif
class __DLL_API FuzzyCalc
     {
          public:
             FuzzyCalc();
            ~FuzzyCalc();
            double  getOutputValue(double val1, double val2);
    };


//FuzzyCalc.cpp
#include "fl/Headers.h"
#include "FuzzyCalc.h"
FuzzyCalc::FuzzyCalc()
    {
     }
FuzzyCalc::~FuzzyCalc()
    {
    }
double FuzzyCalc::getOutputValue(double val1, double val2)
    {
        return 0.0;
    }

直到这一点,每件事都是正常的,程序编译和构建成功,但如果我添加这个:

#include "stdafx.h"
#include "fl/Headers.h"
#include "FuzzyCalc.h"
FuzzyCalc::FuzzyCalc()
  {
  }
FuzzyCalc::~FuzzyCalc()
  {
  }
double FuzzyCalc::getOutputValue(double val1, double val2)
  {
    return 0.0;
  }

我遇到了一些错误:

Error   C2146   syntax error: missing ')' before identifier 'a' fuzzyind      fuzzylite\fl\Operation.h  41  
Error   C2365   'T': redefinition; previous definition was 'template parameter' fuzzyind \fuzzylite\fl\Operation.h  41  
Error   C2061   syntax error: identifier 'a'    fuzzyind    \fuzzylite\fl\Operation.h   41  
Error   C2059   syntax error: ')'   fuzzyind    \fuzzylite\fl\Operation.h   41  
Error   C2334   unexpected token(s) preceding ':'; skipping apparent function body  fuzzyind \fuzzylite\fl\Operation.h  41  
Error   C2988   unrecognizable template declaration/definition  fuzzyind    \fuzzylite\fl\term\Term.h   37  
Error   C2143   syntax error: missing ';' before 'namespace'    fuzzyind    \fuzzylite\fl\term\Term.h   37  
Error   C1004   unexpected end-of-file found    fuzzyind fuzzyind\dllmain.cpp   19  

只添加一行,每件事都出错。

1 个答案:

答案 0 :(得分:0)

我解决了问题。 问题是因为在stdafx.h文件中添加了windows.h。 在该文件中,有一些宏定义,如min和max,与fuzzylite库冲突。 通过添加#define NOMINMAX之前包含问题解决了真正的方法是:

// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently

#pragma once

#include "targetver.h"

#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from     
#define NOMINMAX
#include <windows.h>
#include "fl/Headers.h"

希望这有助于其他人。