- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在学习如何使用 OpenCL 进行编码,并决定运行一些示例代码。我已经下载了 Intel SDK、Microsoft Visual Studio 2017 及其相关插件。
当我尝试运行程序时,从英特尔下载的 %iNTELOCLSDKROOT 依赖项中包含的“附加依赖项”文件之一出现问题。当我尝试构建解决方案时遇到的错误是模板无法声明为具有 C 链接 (C2894)。此错误完全位于一个名为 xtr1common.txt 的文件中。我尝试将文件名从 host.cpp 更改为 host.c,这消除了 C2894 错误,但随后出现了有关语法的新错误,因为它显然不是用 C 编写的。
有谁遇到过这个问题,并且知道如何解决吗?我很困惑,因为我非常怀疑英特尔的代码中有错误,而且我很可能没有注意到其他事情。为了以防万一代码中可能有错误,我将其包含在下面。欢迎提出任何建议。
// xtr1common internal header
#pragma once
#ifndef _XTR1COMMON_
#define _XTR1COMMON_
#ifndef RC_INVOKED
#include <yvals.h>
#pragma pack(push,_CRT_PACKING)
#pragma warning(push,_STL_WARNING_LEVEL)
#pragma warning(disable: _STL_DISABLED_WARNINGS)
#pragma push_macro("new")
#undef new
_STD_BEGIN
// STRUCT _Nil
struct _Nil
{ // empty struct, for unused argument types
};
// TEMPLATE CLASS integral_constant
template<class _Ty,
_Ty _Val>
struct integral_constant
{ // convenient template for integral constant types
static constexpr _Ty value = _Val;
using value_type = _Ty;
using type = integral_constant;
constexpr operator value_type() const _NOEXCEPT
{ // return stored value
return (value);
}
constexpr value_type operator()() const _NOEXCEPT
{ // return stored value
return (value);
}
};
// ALIAS TEMPLATE bool_constant
template<bool _Val>
using bool_constant = integral_constant<bool, _Val>;
using true_type = bool_constant<true>;
using false_type = bool_constant<false>;
// TEMPLATE CLASS enable_if
template<bool _Test,
class _Ty = void>
struct enable_if
{ // type is undefined for assumed !_Test
};
template<class _Ty>
struct enable_if<true, _Ty>
{ // type is _Ty for _Test
using type = _Ty;
};
template<bool _Test,
class _Ty = void>
using enable_if_t = typename enable_if<_Test, _Ty>::type;
// TEMPLATE CLASS conditional
template<bool _Test,
class _Ty1,
class _Ty2>
struct conditional
{ // type is _Ty2 for assumed !_Test
using type = _Ty2;
};
template<class _Ty1,
class _Ty2>
struct conditional<true, _Ty1, _Ty2>
{ // type is _Ty1 for _Test
using type = _Ty1;
};
template<bool _Test,
class _Ty1,
class _Ty2>
using conditional_t = typename conditional<_Test, _Ty1, _Ty2>::type;
// TEMPLATE CLASS is_same
template<class _Ty1,
class _Ty2>
struct is_same
: false_type
{ // determine whether _Ty1 and _Ty2 are the same type
};
template<class _Ty1>
struct is_same<_Ty1, _Ty1>
: true_type
{ // determine whether _Ty1 and _Ty2 are the same type
};
template<class _Ty,
class _Uty>
constexpr bool is_same_v = is_same<_Ty, _Uty>::value;
// TEMPLATE CLASS remove_const
template<class _Ty>
struct remove_const
{ // remove top level const qualifier
using type = _Ty;
};
template<class _Ty>
struct remove_const<const _Ty>
{ // remove top level const qualifier
using type = _Ty;
};
template<class _Ty>
using remove_const_t = typename remove_const<_Ty>::type;
// TEMPLATE CLASS remove_volatile
template<class _Ty>
struct remove_volatile
{ // remove top level volatile qualifier
using type = _Ty;
};
template<class _Ty>
struct remove_volatile<volatile _Ty>
{ // remove top level volatile qualifier
using type = _Ty;
};
template<class _Ty>
using remove_volatile_t = typename remove_volatile<_Ty>::type;
// TEMPLATE CLASS remove_cv
template<class _Ty>
struct remove_cv
{ // remove top level const and volatile qualifiers
using type = _Ty;
};
template<class _Ty>
struct remove_cv<const _Ty>
{ // remove top level const and volatile qualifiers
using type = _Ty;
};
template<class _Ty>
struct remove_cv<volatile _Ty>
{ // remove top level const and volatile qualifiers
using type = _Ty;
};
template<class _Ty>
struct remove_cv<const volatile _Ty>
{ // remove top level const and volatile qualifiers
using type = _Ty;
};
template<class _Ty>
using remove_cv_t = typename remove_cv<_Ty>::type;
// TEMPLATE CLASS _Is_integral
template<class _Ty>
struct _Is_integral
: false_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<bool>
: true_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<char>
: true_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<unsigned char>
: true_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<signed char>
: true_type
{ // determine whether _Ty is integral
};
#ifdef _NATIVE_WCHAR_T_DEFINED
template<>
struct _Is_integral<wchar_t>
: true_type
{ // determine whether _Ty is integral
};
#endif /* _NATIVE_WCHAR_T_DEFINED */
template<>
struct _Is_integral<char16_t>
: true_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<char32_t>
: true_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<unsigned short>
: true_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<short>
: true_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<unsigned int>
: true_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<int>
: true_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<unsigned long>
: true_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<long>
: true_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<unsigned long long>
: true_type
{ // determine whether _Ty is integral
};
template<>
struct _Is_integral<long long>
: true_type
{ // determine whether _Ty is integral
};
// TEMPLATE CLASS is_integral
template<class _Ty>
struct is_integral
: _Is_integral<remove_cv_t<_Ty>>::type
{ // determine whether _Ty is integral
};
template<class _Ty>
constexpr bool is_integral_v = is_integral<_Ty>::value;
// TEMPLATE CLASS _Is_floating_point
template<class _Ty>
struct _Is_floating_point
: false_type
{ // determine whether _Ty is floating point
};
template<>
struct _Is_floating_point<float>
: true_type
{ // determine whether _Ty is floating point
};
template<>
struct _Is_floating_point<double>
: true_type
{ // determine whether _Ty is floating point
};
template<>
struct _Is_floating_point<long double>
: true_type
{ // determine whether _Ty is floating point
};
// TEMPLATE CLASS is_floating_point
template<class _Ty>
struct is_floating_point
: _Is_floating_point<remove_cv_t<_Ty>>::type
{ // determine whether _Ty is floating point
};
template<class _Ty>
constexpr bool is_floating_point_v = is_floating_point<_Ty>::value;
// TEMPLATE CLASS is_arithmetic
template<class _Ty>
struct is_arithmetic
: bool_constant<is_integral<_Ty>::value
|| is_floating_point<_Ty>::value>
{ // determine whether _Ty is an arithmetic type
};
template<class _Ty>
constexpr bool is_arithmetic_v = is_arithmetic<_Ty>::value;
// TEMPLATE CLASS remove_reference
template<class _Ty>
struct remove_reference
{ // remove reference
using type = _Ty;
};
template<class _Ty>
struct remove_reference<_Ty&>
{ // remove reference
using type = _Ty;
};
template<class _Ty>
struct remove_reference<_Ty&&>
{ // remove rvalue reference
using type = _Ty;
};
template<class _Ty>
using remove_reference_t = typename remove_reference<_Ty>::type;
_STD_END
#pragma pop_macro("new")
#pragma warning(pop)
#pragma pack(pop)
#endif /* RC_INVOKED */
#endif /* _XTR1COMMON_ */
/*
* Copyright (c) by P.J. Plauger. All rights reserved.
* Consult your license regarding permissions and restrictions.
V6.50:0009 */
最佳答案
我发现这个头文件#includes xtr1common,并且在程序中具有外部C。这可能是问题的根源吗?自从使用 SDK 从 Intel 下载后我就没有更改过它。
/* xtgmath.h internal header */
#if defined(__cplusplus)
#pragma once
#ifndef _XTGMATH
#define _XTGMATH
#ifndef RC_INVOKED
#include <cstdlib>
#include <xtr1common>
#pragma pack(push,_CRT_PACKING)
#pragma warning(push,_STL_WARNING_LEVEL)
#pragma warning(disable: _STL_DISABLED_WARNINGS)
#pragma push_macro("new")
#undef new
_STD_BEGIN
template<class _Ty1,
class _Ty2>
using _Common_float_type_t =
conditional_t<is_same<_Ty1, long double>::value || is_same<_Ty2, long double>::value, long double,
conditional_t<is_same<_Ty1, float>::value && is_same<_Ty2, float>::value, float,
double>>; // find type for two-argument math function
_STD_END
#define _CRTDEFAULT
#define _CRTSPECIAL _ACRTIMP
#define _GENERIC_MATH1R(FUN, RET, CRTTYPE) \
extern "C" _Check_return_ CRTTYPE RET __cdecl FUN(_In_ double); \
template<class _Ty, \
class = _STD enable_if_t< _STD is_integral<_Ty>::value>> inline \
RET FUN(_Ty _Left) \
{ \
return (_CSTD FUN(static_cast<double>(_Left))); \
}
#define _GENERIC_MATH1(FUN, CRTTYPE) \
_GENERIC_MATH1R(FUN, double, CRTTYPE)
#define _GENERIC_MATH1X(FUN, ARG2, CRTTYPE) \
extern "C" _Check_return_ CRTTYPE double __cdecl FUN(_In_ double, ARG2); \
template<class _Ty, \
class = _STD enable_if_t< _STD is_integral<_Ty>::value>> inline \
double FUN(_Ty _Left, ARG2 _Arg2) \
{ \
return (_CSTD FUN(static_cast<double>(_Left), _Arg2)); \
}
#define _GENERIC_MATH2_CALL(FUN, CRTTYPE, CALL_OPT) \
extern "C" _Check_return_ CRTTYPE double CALL_OPT FUN(_In_ double, _In_ double); \
template<class _Ty1, \
class _Ty2, \
class = _STD enable_if_t< _STD is_arithmetic<_Ty1>::value && _STD is_arithmetic<_Ty2>::value>> inline \
_STD _Common_float_type_t<_Ty1, _Ty2> FUN(_Ty1 _Left, _Ty2 _Right) \
{ \
typedef _STD _Common_float_type_t<_Ty1, _Ty2> type; \
return (_CSTD FUN(static_cast<type>(_Left), static_cast<type>(_Right))); \
}
#define _GENERIC_MATH2(FUN, CRTTYPE) \
_GENERIC_MATH2_CALL(FUN, CRTTYPE, __cdecl)
template<class _Ty1,
class _Ty2,
class = _STD enable_if_t< _STD is_arithmetic<_Ty1>::value && _STD is_arithmetic<_Ty2>::value>> inline
_STD _Common_float_type_t<_Ty1, _Ty2> pow(const _Ty1 _Left, const _Ty2 _Right)
{ // bring mixed types to a common type
typedef _STD _Common_float_type_t<_Ty1, _Ty2> type;
return (_CSTD pow(static_cast<type>(_Left), static_cast<type>(_Right)));
}
//_GENERIC_MATH1(abs, _CRTDEFAULT) // has integer overloads
_GENERIC_MATH1(acos, _CRTDEFAULT)
_GENERIC_MATH1(asin, _CRTDEFAULT)
_GENERIC_MATH1(atan, _CRTDEFAULT)
_GENERIC_MATH2(atan2, _CRTDEFAULT)
_GENERIC_MATH1(ceil, _CRTSPECIAL)
_GENERIC_MATH1(cos, _CRTDEFAULT)
_GENERIC_MATH1(cosh, _CRTDEFAULT)
_GENERIC_MATH1(exp, _CRTDEFAULT)
_GENERIC_MATH1(fabs, _CRT_JIT_INTRINSIC)
_GENERIC_MATH1(floor, _CRTSPECIAL)
_GENERIC_MATH2(fmod, _CRTDEFAULT)
_GENERIC_MATH1X(frexp, _Out_ int *, _CRTSPECIAL)
_GENERIC_MATH1X(ldexp, _In_ int, _CRTSPECIAL)
_GENERIC_MATH1(log, _CRTDEFAULT)
_GENERIC_MATH1(log10, _CRTDEFAULT)
//_GENERIC_MATH1(modf, _CRTDEFAULT) // types must match
//_GENERIC_MATH2(pow, _CRTDEFAULT) // hand crafted
_GENERIC_MATH1(sin, _CRTDEFAULT)
_GENERIC_MATH1(sinh, _CRTDEFAULT)
_GENERIC_MATH1(sqrt, _CRTDEFAULT)
_GENERIC_MATH1(tan, _CRTDEFAULT)
_GENERIC_MATH1(tanh, _CRTDEFAULT)
// C99 MATH FUNCTIONS
// TEMPLATE FUNCTION fma
inline float _Fma(float _Left, float _Middle, float _Right)
{ // call float fma
return (_CSTD fmaf(_Left, _Middle, _Right));
}
inline double _Fma(double _Left, double _Middle, double _Right)
{ // call double fma
return (_CSTD fma(_Left, _Middle, _Right));
}
inline long double _Fma(long double _Left, long double _Middle,
long double _Right)
{ // call long double fma
return (_CSTD fmal(_Left, _Middle, _Right));
}
template<class _Ty1,
class _Ty2,
class _Ty3> inline
_STD _Common_float_type_t<_Ty1, _STD _Common_float_type_t<_Ty2, _Ty3>>
fma(_Ty1 _Left, _Ty2 _Middle, _Ty3 _Right)
{ // bring mixed types to a common type
typedef _STD _Common_float_type_t<_Ty1, _STD _Common_float_type_t<_Ty2, _Ty3>> type;
return (_Fma((type)_Left, (type)_Middle, (type)_Right));
}
// TEMPLATE FUNCTION remquo
inline float _Remquo(float _Left, float _Right, int *_Pquo)
{ // call float remquo
return (_CSTD remquof(_Left, _Right, _Pquo));
}
inline double _Remquo(double _Left, double _Right, int *_Pquo)
{ // call double remquo
return (_CSTD remquo(_Left, _Right, _Pquo));
}
inline long double _Remquo(long double _Left, long double _Right, int *_Pquo)
{ // call long double remquo
return (_CSTD remquol(_Left, _Right, _Pquo));
}
template<class _Ty1,
class _Ty2> inline
_STD _Common_float_type_t<_Ty1, _Ty2>
remquo(_Ty1 _Left, _Ty2 _Right, int *_Pquo)
{ // bring mixed types to a common type
typedef _STD _Common_float_type_t<_Ty1, _Ty2> type;
return (_Remquo((type)_Left, (type)_Right, _Pquo));
}
_GENERIC_MATH1(acosh, _CRTSPECIAL)
_GENERIC_MATH1(asinh, _CRTSPECIAL)
_GENERIC_MATH1(atanh, _CRTSPECIAL)
_GENERIC_MATH1(cbrt, _CRTSPECIAL)
_GENERIC_MATH2(copysign, _CRTSPECIAL)
_GENERIC_MATH1(erf, _CRTSPECIAL)
_GENERIC_MATH1(erfc, _CRTSPECIAL)
_GENERIC_MATH1(expm1, _CRTSPECIAL)
_GENERIC_MATH1(exp2, _CRTSPECIAL)
_GENERIC_MATH2(fdim, _CRTSPECIAL)
//_GENERIC_MATH3(fma, _CRTSPECIAL) // hand crafted
_GENERIC_MATH2(fmax, _CRTSPECIAL)
_GENERIC_MATH2(fmin, _CRTSPECIAL)
_GENERIC_MATH2(hypot, _CRTSPECIAL)
_GENERIC_MATH1R(ilogb, int, _CRTSPECIAL)
_GENERIC_MATH1(lgamma, _CRTSPECIAL)
_GENERIC_MATH1R(llrint, long long, _CRTSPECIAL)
_GENERIC_MATH1R(llround, long long, _CRTSPECIAL)
_GENERIC_MATH1(log1p, _CRTSPECIAL)
_GENERIC_MATH1(log2, _CRTSPECIAL)
_GENERIC_MATH1(logb, _CRTSPECIAL)
_GENERIC_MATH1R(lrint, long, _CRTSPECIAL)
_GENERIC_MATH1R(lround, long, _CRTSPECIAL)
_GENERIC_MATH1(nearbyint, _CRTSPECIAL)
_GENERIC_MATH2(nextafter, _CRTSPECIAL)
_GENERIC_MATH1X(nexttoward, _In_ long double, _CRTSPECIAL)
_GENERIC_MATH2(remainder, _CRTSPECIAL)
//_GENERIC_MATH2X(remquo, _CRTSPECIAL) // hand crafted
_GENERIC_MATH1(rint, _CRTSPECIAL)
_GENERIC_MATH1(round, _CRTSPECIAL)
_GENERIC_MATH1X(scalbln, _In_ long, _CRTSPECIAL)
_GENERIC_MATH1X(scalbn, _In_ int, _CRTSPECIAL)
_GENERIC_MATH1(tgamma, _CRTSPECIAL)
_GENERIC_MATH1(trunc, _CRTSPECIAL)
#undef _CRTDEFAULT
#undef _CRTSPECIAL
#undef _GENERIC_MATH1R
#undef _GENERIC_MATH1
#undef _GENERIC_MATH1X
#undef _GENERIC_MATH2_CALL
#undef _GENERIC_MATH2
#pragma pop_macro("new")
#pragma warning(pop)
#pragma pack(pop)
#endif /* RC_INVOKED */
#endif /* _XTGMATH */
#endif /* defined(__cplusplus) */
/*
* Copyright (c) by P.J. Plauger. All rights reserved.
* Consult your license regarding permissions and restrictions.
V6.50:0009 */
关于c++ - Microsoft Visual Studio 上的 OpenCL : templates cannot be declared to have C linkage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46991241/
我有一个模板类 展览.h: template class ExpOf{ ... } 我在整个代码中反复使用,例如T = double [和其他类ExpOf应该一无所知]。 所以我认为一次性编译它是个
如果你有一个名为“Rock”的类,你会做类似的事情:- int main() { Rock; } 为什么会出现“声明未声明任何内容”错误? 它不应该只是调用默认构造函数并在那一刻创建对象吗?
这是一个非常业余的问题,我确信这将是一个非常简单的答案,但我似乎无法弄清楚问题所在。我有一个带有相应 .cpp 文件的头文件,但出于某种原因,每当我尝试使用 g++ 进行编译时,我都会收到错误消息:
我正在使用 MinGW 将我的 Linux 项目转换为在 Windows 上编译。它在 Linux 上编译和运行都很好,但是当我尝试用 MinGW 编译它时,它会出现以下错误消息: camera.h:
我收到“decleration does not declare anything [-fpermissive] 错误”;这是我的代码; #ifndef CAMERA_H #define CAMERA
我正在编写一些 cython 代码,但遇到了一个奇怪的问题。当我尝试将对象作为结构直接从 python 传递到 C 时,cython 生成的代码很好,但 gcc 不喜欢代码输出并给我以下错误:erro
typedef struct BO2Offsets { struct Prestige { u32 offset = 0x000000; char da
我不明白 C++ 中的某些东西,gcc 不喜欢我如何进行。 我做到了: if (!fModeMdi) MyFirstClass* main = (MyFirstClas
在 switch-case 语句中,declaration-with-initialization 是无效的,但允许 declaration-and-then-assignment。如以下代码片段所示
我在我的界面文件中收到一条奇怪的警告。 这也出现在我为此声明属性的那一行。 谁能帮帮我? 最佳答案 在您的项目中的某处,您有一个 #define 将 xOffset 定义为空(除了注释)。像这样: #
declare +x 下面做了什么? (特定于 Bash。)我理解 declare -x,但不理解 declare +x: function the_func { declare +x MY_VA
由于我是 Symfony 的新手,我尝试使用 Doctrine 创建实体关系。我收到错误 “[bundle/entity/file_location”中的属性“report”已经声明,但在我尝试更新架
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 2年前关闭。 Imp
这是给我错误的代码: TAdvSmoothDockItems = class(TCollection) private FOwner: TAdvSmoothDock; FOnChange: T
我对 python 很陌生,我尝试制作一个简单的 GUI 程序。但是,我遇到了一个“问题”,确切地说是一个警告,上面写着:“m”未在全局范围内定义(Python(变量未定义全局))。 我知道如果你想在
当我用 GCC 编译程序时,它会显示“警告:声明未声明任何内容 [-fpermissive]”。 有问题的代码如下: typedef int BOOL; 如何清除警告? 最佳答案 您可以尝试以下操作。
我正在编写一个包含键值对集合的重要类,在编译期间我收到一个我无法弄清楚的非常奇怪的错误。在一个与这里的函数非常相似的函数中,但由于所需代码的复杂性而没有上下文,我收到错误: TValue& opera
这个问题很简单。为了进一步阐明,下面代码中的 Foo1 和 Foo2 在它们的声明方式方面到底有什么区别(例如,使用 class Foo1 { 。 .. }; 而另一个使用 typedef class
我正在开发 Web 项目,并且在从 Oracle 数据库迁移到 mysql 数据库时遇到一些问题。我想用这段代码创建函数: DROP FUNCTION IF EXISTS F_MANIFEST_GAB
是否有一个标志可以传递给 gcc 以禁用此警告?我知道它的作用,但这对我的程序来说无关紧要。 编辑:我只想禁用警告,保持代码不变。编译以下代码会生成警告: struct post{ unsigne
我是一名优秀的程序员,十分优秀!