我的问题很奇怪。
在visual c++
我想使用fuzzylite library
创建一个dll。
当我创建使用表单(myclass.h
,myclass.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
只添加一行,每件事都出错。
答案 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"
希望这有助于其他人。